Maalesef Uygulamam durdu. Bunu Nasıl Çözebilirim?

Apr 29 2014

Bir uygulama geliştiriyorum ve her çalıştırdığımda şu mesajı alıyorum:

Maalesef, Uygulamam durdu.

Bunu çözmek için ne yapabilirim?


Bu soru hakkında - açıkça bir yığın izleme nedir ve bunu uygulama hatalarımda hata ayıklamak için nasıl kullanabilirim? , daha fazla ayrıntı olmadan uygulamalarının çöktüğünü belirten birçok soru var. Bu soru, acemi Android programcılarına, sorunlarını kendi başlarına nasıl çözecekleri veya doğru soruları nasıl soracakları konusunda talimat vermeyi amaçlamaktadır.

Yanıtlar

734 nhaarman Apr 29 2014 at 06:55

Bu cevap, yığın izlemesini alma sürecini açıklar. Zaten yığın izleme var mı? " Yığın izleme nedir ve bunu uygulama hatalarımda hata ayıklamak için nasıl kullanabilirim? "

Sorun

Bir yakalama RuntimeExceptionatıldığı için başvurunuz sonlandırıldı .
Bunlardan en yaygın olanı NullPointerException.

Nasıl çözeceksin?

Bir Android uygulaması (veya bu konuyla ilgili herhangi bir Java uygulaması) her çöktüğünde Stack trace, konsola (bu durumda, logcat) bir yazılır. Bu yığın izleme, sorununuzu çözmek için çok önemli bilgiler içerir.

Android Studio

Pencerenin alt çubuğunda Logcatdüğmesine tıklayın. Alternatif olarak, alt+ tuşuna da basabilirsiniz 6. DevicesPanelde emülatörünüzün veya cihazınızın seçili olduğundan emin olun . Ardından, kırmızı ile gösterilen yığın izini bulmaya çalışın. Logcat'te oturum açmış birçok şey olabilir, bu yüzden biraz kaydırmanız gerekebilir. Yığın izini bulmanın kolay bir yolu, logcat'i temizlemek (sağdaki geri dönüşüm kutusunu kullanarak) ve uygulamanın tekrar çökmesine izin vermektir.

Yığın izini buldum, şimdi ne olacak?

Yaşasın! Sorununuzu çözmenin yarısına geldiniz.
Yığın izini analiz ederek uygulamanızın tam olarak neyin çökmesine neden olduğunu bulmanız yeterlidir.

" Yığın izleme nedir ve bunu uygulama hatalarımda hata ayıklamak için nasıl kullanabilirim? "

Hala sorunumu çözemiyorum!

Kendinizi Exceptionve nerede oluştuğunu bulduysanız ve hala nasıl düzelteceğinizi çözemiyorsanız, StackOverflow'da soru sormaktan çekinmeyin.

Mümkün olduğunca kısa ve öz olmaya çalışın: yığın izini ve ilgili kodu gönderin (örneğin, atan satıra kadar birkaç satır Exception).

121 VladBezden Mar 23 2015 at 06:06

Sen kullanabilirsiniz Google'ın ADB aracını almak için Logcat filekonuyu analiz etmek.

adb logcat > logcat.txt

logcat.txtdosyayı açın ve uygulama adınızı arayın. Neden başarısız olduğu, satır numarası, Sınıf adı vb. Hakkında bilgi olmalıdır.

38 HirenVaghela Mar 18 2015 at 15:01

İlk olarak, uygulamanızın hangi noktada kilitlendiğini kontrol edin ( Unfortunately, MyApp has stopped.). Bunun için kullanabilirsiniz Log.e("TAG", "Message");, bu satırı kullanarak uygulamanızın logcat oturumunu görebilirsiniz.

Bundan sonra, uygulamanızın hangi noktayı durdurduğunu bulursunuz, kendi tarafınızda çözmesi çok kolaydır.

29 RahilAli Jun 11 2015 at 17:58

Sadece log cat'deki hatayı kontrol edin.

Tutulma sırasında günlük kedi seçeneğini alırsınız:

pencere-> görünümü göster-> diğerleri-> Android-> Logcat

Günlük kedi hata içeriyor.

Aksi takdirde, hata ayıklama modunda bir uygulamayı çalıştırarak da hatayı kontrol edebilirsiniz. Önce bundan sonra şunu yaparak kesme noktası ayarlayın:

projeye sağ tıklayın-> hata ayıkla-> Android uygulaması

28 AliBdeir Nov 06 2016 at 16:23

Not: Bu yanıt Android Studio 2.2.2 kullanıyor

Not 2: Cihazınızın başarıyla bağlandığını düşünüyorum.


Uygulamanız çöktüğünde yaptığınız ilk şey, LogCat'e bakmaktır, Android Studio'nun altında, menülerin bir listesini içeren bir araç çubuğu vardır:

"Android Monitörü" nü tıklayın (Yukarıdaki resimde altı çizdiğim. ^)

Şimdi, şöyle bir şey alacaksın:

" Verbose" " " "Olarak değiştirin ErrorŞimdi size yalnızca kaydedilen hataları gösterecektir. Şimdi tüm bu hatalar için endişelenmeyin (eğer aldıysanız).

Tamam. Şimdi, uygulamanızı kilitlemek için yaptığınız şeyi yapın. Uygulamanız kilitlendikten sonra logcat'inize gidin. Örneğin çok sayıda at:x.x.x: içeren yeni bir kilitlenme günlüğü bulmalısınız Caused by: TrumpIsPresidentException. Caused by:Logcat'inizde bu ifadeye gidin .

Sonraki için o Caused By:oldu, İstisna olmalıdır. Benim durumumda, bu bir RuntimeExceptionve altında mavi bir bağlantı içeren bir çizgi olmalıdır, örneğin:

O takdirdeCaused by: bunun altında mavi bir metin yerde bir çizgi var ETMEZ, sonra başka bakmak Caused by:yapar.

O mavi bağlantıya tıklayın . Sizi sorunun meydana geldiği yere götürmelidir. Benim durumumda, bu satırdan kaynaklanıyordu:

throw new RuntimeException();

Şimdi neden çöktüğünü anlıyorum. Çünkü ben istisnayı kendim yapıyorum. Bu bariz bir hataydı .


Ancak diyelim ki başka bir hata aldım:

java.lang.NullPointerException

Logcatimi kontrol ettim, bana verdiği mavi bağlantıya tıkladım ve beni buraya götürdü:

mTextView.setText(myString);

Yani, şimdi hata ayıklamak istiyorum. Göre bu StackOverflow soru , bir NullPointerException şey olduğunu söylüyor null.

Öyleyse, null null olduğunu bulalım . İki olasılık var. Ya mTextViewnull ya myStringda null. Öğrenmek için mTextView.setText(mString)satırdan önce şu iki satırı ekliyorum:

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

Şimdi, daha önce yaptığımız gibi (Verose'u Hata olarak değiştirdik), "Hata" yı "Hata Ayıkla" olarak değiştirmek istiyoruz. Hata ayıklayarak günlüğe kaydettiğimiz için. İşte tüm Günlük yöntemleri:

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

Yani, kullandığımızdan beri Log.dDebug'ı kontrol ediyoruz. Bu yüzden onu hata ayıklamak için değiştirdik.

Bildirim Log.d, bizim durumumuzda "AppDebug" olan bir birinci parametreye sahiptir. Logcat'in sağ üst köşesindeki "Filtresiz" açılır menüsünü tıklayın. "Filtre Yapılandırmasını Düzenle" yi seçin, filtrenize bir ad verin ve "Günlük Etiketi" alanına "Uygulama Hata Ayıklama" yazın. "Tamam" ı tıklayın. Şimdi, logcat'de iki satır görmelisiniz:

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

Artık mTextView'ın boş olduğunu biliyoruz.

Kodumu gözlemliyorum, şimdi bir şey fark ediyorum.

Ben var private TextView mTextViewbenim sınıfının en üstünde ilan etti. Ama onu tanımlamıyorum.

Temel olarak bunu onCreate () uygulamamda yapmayı unuttum:

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

Bu yüzden mTextViewuygulamama ne olduğunu söylemeyi unuttum. Bu yüzden bu satırı ekliyorum, uygulamamı çalıştırıyorum ve şimdi uygulama çökmüyor.


20 Ani Jul 04 2017 at 11:38

Bu açılır pencere, yalnızca kodunuzda uygulamanın yürütülmesini durduran önemli bir istisna aldığınızda gösterilir. Herhangi bir istisna olabilir NullPointerException, OutOfMemoryExceptionvb.

Çek en iyi yolu geçer LogCat hala yığın izleme okumak ve uygulamanın nedenini kontrol etmek hızlı yolu olan Android stüdyoda uygulama geliştirme eğer.

Uygulamanız zaten yayındaysa, logcat'i kullanamazsınız . Böylece, Crashlyticsmeydana gelen herhangi bir istisnanın hata raporlarını size sağlamak için uygulayabilirsiniz .

18 Manojahirwar Jun 29 2015 at 18:48

LogcatMesajınızı kontrol edin ve Manifestdosyanızı görün. Activity,Kullanıcı iznini tanımlamak gibi bir şey eksik olmalıdır` vb.

15 ShivBuyya Nov 03 2015 at 12:47

Şu araçlardan herhangi birini kullanabilirsiniz:

  1. adb logcat

  2. adb logcat> logs.txt (hataları açmak ve aramak için düzenleyicileri kullanabilirsiniz.)

  3. eclipse logcat (Tutulmada görünmüyorsa, Windows-> Görünümü Göster-> Diğerleri-> Android-> LogCat'e gidin)

  4. Android Hata Ayıklama İzleyicisi veya Android Cihaz İzleyicisi (komut izleyicisi yazın veya kullanıcı arabirimi aracılığıyla açın)

  1. Android Studio

Android Debug Monitor'u kullanmanızı öneririm , bu iyi. Çünkü tutulma, çok fazla günlük olduğunda ve adb logcat filtresiyle ve hepsi zor olduğunda askıda kalıyor.

13 alirezaamini Jul 13 2015 at 15:37

Kontrol etmelisiniz Stack trace

Bu nasıl yapılır?

IDE'nizde LOGCAT formundaki pencereleri kontrol edin

Logcat pencerelerini göremiyorsanız bu yola gidin ve açın

window->show view->others->Android->Logcat

Google-Api kullanıyorsanız bu yola gidin

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

Aşağıdaki showToast () yönteminde, deneyebilirsiniz, böylece bağlam veya uygulama bağlamı için başka bir parametre iletmeniz gerekir.

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}
11 W0rmH0le Jul 14 2016 at 10:21

Bir Kapatmaya Zorla karşılaştığınızda (uygulama çalışmayı durdurduğunda) temel bir Logcat analizini paylaşmama izin verin.

BELGELER

Günlükleri toplamak / analiz etmek için Android'in temel aracı logcat'tir.

HERE , Android'in logcat hakkındaki sayfasıdır

Android Studio kullanıyorsanız, bu LINK'i de kontrol edebilirsiniz .

Yakalama

Temel olarak, logcat'i aşağıdaki komutla MANUEL OLARAK yakalayabilirsiniz (veya sadece AndroidStudio'da AndroidMonitor penceresini kontrol edebilirsiniz):

adb logcat

Komuta ekleyebileceğiniz, istediğiniz mesajı filtrelemenize ve görüntülemenize yardımcı olacak birçok parametre vardır ... Bu kişiseldir ... Mesaj zaman damgasını almak için her zaman aşağıdaki komutu kullanırım:

adb logcat -v time

Çıkışı bir dosyaya yönlendirebilir ve bir Metin Düzenleyicide analiz edebilirsiniz.

Analiz

Uygulamanız Kilitleniyorsa, aşağıdaki gibi bir şey alırsınız:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

Günlüğün bu bölümü size birçok bilgi gösterir:

  • Sorun ne zaman ortaya çıktı? 07-09 08:29:13.475

Sorunun ne zaman gerçekleştiğini kontrol etmek önemlidir ... Bir günlükte birkaç hata bulabilirsiniz ... doğru mesajları kontrol ettiğinizden emin olmalısınız :)

  • Hangi uygulama kilitlendi: com.example.khan.abc

Bu şekilde, hangi uygulamanın kilitlendiğini bilirsiniz (mesajınızla ilgili günlükleri kontrol ettiğinizden emin olmak için)

  • Hangi HATA: java.lang.NullPointerException

NULL Pointer İstisna hatası

  • Hata hakkında ayrıntılı bilgi: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

onBackPressed()Bir FragmentActivitynesneden yöntemi çağırmayı denediniz . Ancak, o nesne nullsen yaptığın zamandı.

  • Yığın İzleme: Yığın İzleme size yöntem çağırma sırasını gösterir ... Bazen hata arama yönteminde olur (ve çağrılan yöntemde değil).

    com.example.khan.abc.AudioFragment adresinde $ 1.onClick (AudioFragment.java:125)

Dosyada hata oluştu , satırdaki yöntemin com.example.khan.abc.AudioFragment.javaiçinde onClick(): 125(yığın izleme, hatanın meydana geldiği satırı gösterir)

Adı:

at android.view.View.performClick(View.java:4848)

Hangi çağırdı:

at android.view.View$PerformClick.run(View.java:20262)

tarafından çağrılan:

at android.os.Handler.handleCallback(Handler.java:815)

vb....

Genel Bakış

Bu sadece bir genel bakıştı ... Tüm günlükler basit değil, ancak hata belirli bir sorun veriyor ve ayrıntılı tüm sorunları gösteriyor ... Sadece fikri paylaşmak ve size giriş seviyesi bilgileri sağlamak için ...

Umarım bir şekilde size yardımcı olabilirim ... Saygılar

9 BiswajitKarmakar May 15 2016 at 14:45

LogCat'i kullanın ve uygulamanın çökmesine neden olan şeyi bulmaya çalışın.

Android Studio kullanıyorsanız Logcat'i görmek için ALT + 6'ya basın veya

Eğer kullanırsanız Eclipse sonra Window -> Aç Perspektif -> Diğer - LogCat

LogCat'e gidin, açılır menüden hata seçin. Bu, hata ayıklamanıza yardımcı olacak tüm gerekli bilgileri içerecektir. Bu işe yaramazsa, LogCat'i sorunuza bir düzenleme olarak gönderin, biri size yardımcı olacaktır.

8 felislynx.silae Oct 02 2017 at 22:07

Uygulamanız herhangi bir nedenle iyi bir yığın izleme olmadan çökerse. İlk satırdan hata ayıklamayı deneyin ve çökene kadar satır satır gidin. O zaman cevabınız olacak, hangi satır size sorun çıkarıyor. Muhtemelen daha sonra bunu deneme bloğu ve yazdırma hatası çıktısına sarabilirsiniz.

6 Pelpotronic Mar 22 2015 at 15:50

Bu hata mesajını, herhangi bir yığın izleme veya başka bir hata mesajı olmaksızın kendi başına da alabilirsiniz.

Bu durumda, Android bildiriminizin doğru şekilde yapılandırıldığından emin olmanız gerekir (bir kitaplıktan gerçekleşen tüm bildirimler ve bir kitaplıktan gelen etkinlikler dahil) ve bildirim dosyalarınızda uygulamanızda görüntülenen ilk etkinliğe özellikle dikkat edin. .

6 naXa Sep 11 2018 at 15:35

Geliştirme sırasında çökme

Benim favori aracı deneyin LogView günlükleri almak ve gelişme sırasında bunları analiz etmek.
Emin işaretine olun ./logviewve ./lib/logview.jarLinux çalıştırırken yürütülebilir olarak.

Beğenmediyseniz, Android için birçok alternatif masaüstü günlük görüntüleyici var .

Vahşi doğada kaza

Kullanıcıların cihazlarında meydana gelen işlenmemiş istisnaların yığın izlerini almak için Firebase Crashlytics gibi gerçek zamanlı bir kilitlenme raporlama aracı entegre edin .

Sahadaki hataların nasıl ele alınacağı hakkında daha fazla bilgi edinmek için Bir Buggy Uygulaması Nasıl Yayınlanır (Ve Hikayeyi Anlatmak İçin Canlı) adlı makaleyi okuyun .

5 KopiBryant May 20 2018 at 00:24

İnsanlar hata yapar ve bu nedenle kodlama da yapar.

Ne zaman errorolursa olsun, her zaman kırmızı renkli metinle logcat ile kontrol edin, ancak asıl sorunu mavi renkli metinde, kırmızı renkli metinde altı çizili olarak bulabilirsiniz.

U yeni oluştur emin olun activityher zaman, beyan activityiçinde AndroidManifestdosyanın.

İzin ekliyorsanız, bunu AndroidMainifestdosyada da bildirin.

5 Ashish Mar 26 2019 at 11:42

Logcat - Android Studio'nun geliştirme aşamasındaki günlükleri kontrol etmek için

Başlangıçta Logcat'i temizleyin ve uygulamanın tekrar çökmesine izin verin, böylece yalnızca kilitlenen günlük ayrıntılarını alabilirsiniz. Yığın izini kontrol etmelisiniz

Maalesef, Uygulamam durdu. Bunun birçok nedeni var. Aynı günlükleri de kontrol edebilirsiniz. Bunun için Log.e ("ETİKET", "Mesaj");

Aşağıdakiler gibi uygulama çökmesi sırasında yaygın hata:

  1. Kodlama hatası (Anahtar kelimelerin yanlış kullanımı).
  2. Eşleşmeyen özellik adı.
  3. Desteklenmeyen eklenti (belki).
  4. Uyumsuz sürüm (belki).
  5. AndroidManifest dosyasında etkinlik eksik.
  6. AndroidManifest dosyasında izin eksik.
  7. En yaygın NullPointerException.
  8. Bildirildi ancak tanımlanmadı.

Uygulama kilitlenme hatasını çözmek için:

  • Yukarıdaki noktaları aklınızda bulundurun ve üzerinden geçin.
  • Hata ile, dosya adını da mavi renkte alacaksınız (üzerlerine tıklayın ve hatadan koda atlayın).
4 MehulSolanki May 22 2019 at 17:40

Öncelikle, uygulamanızın nerede ve neden çöktüğünü kontrol etmeniz gerekir. (Unfortunately, MyApp has stopped.).Yardımıyla, LOGneyin yanlış gittiğini anlayabilirsiniz.

Bundan sonra, uygulamanızın sizin açınızdan düzeltmeyi hangi noktada durdurduğunu bulursunuz.

4 zapotec Jun 12 2019 at 20:07

Terminalinizde herhangi bir ilginç günlüğünüz yoksa (veya bunlar doğrudan uygulamanızla ilgili değilse), sorununuz yerel bir kitaplıktan kaynaklanıyor olabilir. Bu durumda, terminalinizdeki "mezar taşı" dosyalarını kontrol etmelisiniz.

Kaldırıldı olarak işaretlenen dosyaların varsayılan konumu her aygıta bağlıdır, ancak bu durumda, şunları söyleyen bir günlüğünüz olacaktır: Tombstone written to: /data/tombstones/tombstone_06

Daha fazla bilgi için https://source.android.com/devices/tech/debug adresini kontrol edin .

2 MohsenEmami Mar 16 2020 at 17:18

Ayrıca bu komutu terminalde çalıştırmak sorunu bulmanıza yardımcı olabilir:

gradlew build > log.txt 2>details.txt

daha sonra yukarıdaki iki günlük dosyasında gradlew dosya konumuna gitmelisiniz.