Sayangnya MyApp telah berhenti. Bagaimana saya bisa memecahkan masalah ini?

Apr 29 2014

Saya mengembangkan aplikasi, dan setiap saya menjalankannya, saya mendapatkan pesan:

Sayangnya, MyApp telah berhenti.

Apa yang dapat saya lakukan untuk mengatasi ini?


Tentang pertanyaan ini - jelas terinspirasi oleh Apa itu pelacakan tumpukan, dan bagaimana saya dapat menggunakannya untuk men-debug kesalahan aplikasi saya? , banyak sekali pertanyaan yang menyatakan bahwa aplikasinya mengalami crash, tanpa penjelasan lebih lanjut. Pertanyaan ini bertujuan untuk menginstruksikan programmer Android pemula tentang cara mencoba dan memperbaiki masalah mereka sendiri, atau mengajukan pertanyaan yang tepat.

Jawaban

734 nhaarman Apr 29 2014 at 06:55

Jawaban ini menjelaskan proses mengambil pelacakan tumpukan. Sudah memiliki pelacakan tumpukan? Baca tentang pelacakan tumpukan di " Apa itu pelacakan tumpukan, dan bagaimana cara menggunakannya untuk men-debug kesalahan aplikasi saya? "

Masalah

Aplikasi Anda berhenti karena pelemparan yang tidak tertangkap RuntimeException.
Yang paling umum adalah NullPointerException.

Bagaimana cara mengatasinya?

Setiap kali aplikasi Android mogok (atau aplikasi Java apa pun), a Stack traceakan ditulis ke konsol (dalam hal ini, logcat). Pelacakan tumpukan ini berisi informasi penting untuk memecahkan masalah Anda.

Android Studio

Di bilah bawah jendela, klik Logcattombol. Atau, Anda dapat menekan alt+ 6. Pastikan emulator atau perangkat Anda dipilih di Devicespanel. Selanjutnya, coba temukan jejak tumpukan, yang ditunjukkan dengan warna merah. Mungkin ada banyak hal yang masuk ke logcat, jadi Anda mungkin perlu menggulir sedikit. Cara mudah untuk menemukan pelacakan tumpukan adalah dengan membersihkan logcat (menggunakan keranjang sampah di sebelah kanan), dan membiarkan aplikasi mogok lagi.

Saya telah menemukan jejak tumpukan, sekarang apa?

Yay! Anda setengah jalan untuk menyelesaikan masalah Anda.
Anda hanya perlu mencari tahu apa yang sebenarnya membuat aplikasi Anda mogok, dengan menganalisis pelacakan tumpukan.

Baca tentang pelacakan tumpukan di " Apa itu pelacakan tumpukan, dan bagaimana cara menggunakannya untuk men-debug kesalahan aplikasi saya? "

Saya masih tidak bisa menyelesaikan masalah saya!

Jika Anda telah menemukan Anda Exceptiondan baris tempat terjadinya, dan masih tidak tahu cara memperbaikinya, jangan ragu untuk mengajukan pertanyaan di StackOverflow.

Cobalah sesingkat mungkin: posting jejak tumpukan, dan kode yang relevan (misalnya beberapa baris ke baris yang menampilkan Exception).

121 VladBezden Mar 23 2015 at 06:06

Anda dapat menggunakan alat ADB Google untuk mendapatkan Logcat fileuntuk menganalisis masalah.

adb logcat > logcat.txt

buka logcat.txtfile dan cari nama aplikasi Anda. Harus ada informasi mengapa gagal, nomor baris, nama kelas, dll.

38 HirenVaghela Mar 18 2015 at 15:01

Pertama, Anda memeriksa titik mana aplikasi Anda macet ( Unfortunately, MyApp has stopped.). Untuk ini, Anda dapat menggunakan Log.e("TAG", "Message");, menggunakan baris ini Anda dapat melihat log aplikasi Anda di logcat.

Setelah itu, Anda menemukan titik mana yang dihentikan aplikasi Anda, sangat mudah dipecahkan di pihak Anda.

29 RahilAli Jun 11 2015 at 17:58

Periksa saja kesalahan di log cat.

Anda mendapatkan opsi kucing log dari dalam gerhana:

jendela-> tampilkan tampilan-> lainnya-> Android-> Logcat

Cat log mengandung kesalahan.

Selain itu, Anda juga dapat memeriksa kesalahan dengan menjalankan aplikasi dalam mode debug. Pertama-tama setel breakpoint setelah itu dengan melakukan:

klik kanan pada proyek-> debug sebagai-> aplikasi Android

28 AliBdeir Nov 06 2016 at 16:23

Catatan: Jawaban ini menggunakan Android Studio 2.2.2

Catatan 2: Saya mempertimbangkan bahwa perangkat Anda berhasil terhubung.


Hal pertama yang Anda lakukan saat aplikasi Anda mogok adalah melihat ke LogCat, di bagian bawah Android Studio ada toolbar dengan daftar menu:

Klik pada "Android Monitor" (Yang saya garis bawahi pada gambar di atas. ^)

Sekarang, Anda akan mendapatkan sesuatu seperti ini:

Ubah " Verbose" menjadi " Error" Sekarang hanya akan menampilkan kesalahan yang dicatat. Jangan khawatir tentang semua kesalahan ini (jika Anda mendapatkannya) sekarang.

Baik. Sekarang, lakukan apa yang Anda lakukan untuk membuat aplikasi Anda mogok. Setelah aplikasi Anda mogok, buka logcat Anda. Anda harus menemukan log kerusakan baru yang memiliki banyak at:x.x.x: dan Caused by: TrumpIsPresidentExceptionmisalnya. Buka Caused by:pernyataan itu di logcat Anda.

Di samping itu Caused By:, harus ada Pengecualian yang terjadi. Dalam kasus saya, itu a RuntimeExceptiondan di bawahnya harus ada baris yang berisi tautan biru seperti:

Jika ituCaused by: TIDAK memiliki baris dengan teks biru di bawahnya, maka cari baris lain yang memiliki teks biru Caused by:.

Klik pada tautan biru itu . Ini akan membawa Anda ke tempat masalah terjadi. Dalam kasus saya, itu karena baris ini:

throw new RuntimeException();

Jadi, sekarang saya tahu mengapa ini crash. Itu karena saya sendiri yang membuat pengecualian. Ini adalah kesalahan yang jelas .


Namun, katakanlah saya mendapat kesalahan lain:

java.lang.NullPointerException

Saya memeriksa logcat saya, saya mengklik tautan biru yang diberikannya kepada saya, dan itu membawa saya ke sini:

mTextView.setText(myString);

Jadi, sekarang saya ingin men-debug. Menurut pertanyaan StackOverflow ini , NullPointerException mengatakan bahwa ada sesuatu null.

Jadi, mari kita cari tahu apa itu null . Ada dua kemungkinan. Bisa mTextViewnihil, atau myStringnihil. Untuk mengetahuinya, sebelum mTextView.setText(mString)baris, saya menambahkan dua baris ini:

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

Sekarang, seperti yang kami lakukan sebelumnya (Kami mengubah Verose menjadi Error), kami ingin mengubah "Error" menjadi "Debug". Karena kami masuk dengan debugging. Berikut semua metode Log:

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

Jadi, karena kami menggunakan Log.d, kami memeriksa Debug. Itulah mengapa kami mengubahnya menjadi debug.

Pemberitahuan Log.dmemiliki parameter pertama, dalam kasus kami "AppDebug". Klik menu drop-down "No Filters" di kanan atas logcat. Pilih "Edit Konfigurasi Filter", beri nama untuk filter Anda, dan di "Tag Log", masukkan "Debug Aplikasi". Klik "OK". Sekarang, Anda akan melihat dua baris di logcat:

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

Jadi sekarang kita tahu bahwa mTextView adalah null.

Saya mengamati kode saya, sekarang saya melihat sesuatu.

Saya telah private TextView mTextViewmenyatakan di puncak kelas saya. Tapi, saya tidak mendefinisikannya.

Pada dasarnya saya lupa melakukan ini di onCreate () saya:

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

Jadi ITULAH mengapa mTextViewnull, karena saya lupa memberi tahu aplikasi saya apa itu. Jadi saya menambahkan baris itu, menjalankan aplikasi saya, dan sekarang aplikasi tidak macet.


20 Ani Jul 04 2017 at 11:38

Munculan ini hanya muncul ketika Anda mendapatkan pengecualian fatal dalam kode Anda yang menghentikan eksekusi aplikasi. Bisa jadi pengecualian apa pun NullPointerException, OutOfMemoryExceptiondll.

Cara terbaik untuk memeriksanya adalah melalui Logcat jika Anda masih mengembangkan aplikasi di studio Android yang merupakan cara cepat untuk membaca pelacakan tumpukan dan memeriksa penyebab aplikasi.

Jika aplikasi Anda sudah aktif, maka Anda tidak dapat menggunakan logcat . Jadi, untuk itu Anda dapat menerapkan Crashlyticsuntuk memberi Anda laporan bug dari setiap pengecualian yang terjadi.

18 Manojahirwar Jun 29 2015 at 18:48

Periksa Logcatpesan Anda dan lihat Manifestfile Anda . Harus ada sesuatu yang hilang seperti menentukan Activity,izin Pengguna`, dll.

15 ShivBuyya Nov 03 2015 at 12:47

Anda dapat menggunakan salah satu alat berikut:

  1. adb logcat

  2. adb logcat> logs.txt (Anda dapat menggunakan editor untuk membuka dan menelusuri kesalahan.)

  3. eclipse logcat (Jika tidak terlihat di eclipse, Buka Windows-> Tampilkan Tampilan-> Lainnya-> Android-> LogCat)

  4. Android Debug Monitor atau Android Device Monitor (ketik command monitor atau buka melalui UI)

  1. Android Studio

Saya sarankan untuk menggunakan Android Debug Monitor , itu bagus. Karena gerhana hang ketika terlalu banyak log yang ada, dan melalui filter logcat adb dan semuanya sulit.

13 alirezaamini Jul 13 2015 at 15:37

Anda harus memeriksa Stack trace

Bagaimana cara melakukannya?

di IDE Anda Periksa jendela dari LOGCAT

Jika Anda tidak dapat melihat jendela logcat, buka jalur ini dan buka

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

jika Anda menggunakan Google-Api pergi ke jalur ini

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

Di bawah metode showToast () Anda harus meneruskan parameter lain untuk konteks atau konteks aplikasi dengan melakukannya Anda dapat mencobanya.

  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

Izinkan saya membagikan analisis Logcat dasar saat Anda bertemu dengan Force Close (saat aplikasi berhenti bekerja).

DOCS

Alat dasar dari Android untuk mengumpulkan / menganalisis log adalah logcat.

DI SINI adalah halaman Android tentang logcat

Jika Anda menggunakan Android Studio, Anda juga dapat memeriksa LINK ini .

Menangkap

Pada dasarnya, Anda secara MANUAL dapat menangkap logcat dengan perintah berikut (atau cukup periksa jendela AndroidMonitor di AndroidStudio):

adb logcat

Ada banyak parameter yang dapat Anda tambahkan ke perintah yang membantu Anda memfilter dan menampilkan pesan yang Anda inginkan ... Ini pribadi ... Saya selalu menggunakan perintah di bawah ini untuk mendapatkan stempel waktu pesan:

adb logcat -v time

Anda dapat mengarahkan output ke file dan menganalisisnya di Editor Teks.

Menganalisa

Jika aplikasi Anda mogok, Anda akan mendapatkan sesuatu seperti:

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

Bagian log ini menunjukkan banyak informasi:

  • Saat masalah terjadi: 07-09 08:29:13.475

Penting untuk memeriksa kapan masalah terjadi ... Anda mungkin menemukan beberapa kesalahan dalam log ... Anda harus yakin bahwa Anda memeriksa pesan yang benar :)

  • Aplikasi mana yang mogok: com.example.khan.abc

Dengan cara ini, Anda tahu aplikasi mana yang mogok (untuk memastikan bahwa Anda memeriksa log tentang pesan Anda)

  • KESALAHAN mana: java.lang.NullPointerException

Kesalahan Pengecualian Penunjuk NULL

  • Info mendetail tentang kesalahan: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

Anda mencoba memanggil metode onBackPressed()dari suatu FragmentActivityobjek. Namun, objek itu adalah nullsaat Anda melakukannya.

  • Stack Trace: Stack Trace menunjukkan kepada Anda urutan pemanggilan metode ... Terkadang, kesalahan terjadi dalam metode pemanggilan (dan bukan dalam metode yang dipanggil).

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

Kesalahan terjadi dalam file com.example.khan.abc.AudioFragment.java, di dalam onClick()metode pada baris: 125(stacktrace menunjukkan baris bahwa kesalahan terjadi)

Itu disebut oleh:

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

Yang disebut oleh:

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

yang disebut dengan:

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

dll ....

Gambaran

Ini hanya gambaran umum ... Tidak semua log itu sederhana tetapi kesalahan memberikan masalah tertentu dan verbose menunjukkan semua masalah ... Ini hanya untuk membagikan ide dan memberikan informasi tingkat awal kepada Anda ...

Saya harap saya bisa membantu Anda bagaimanapun juga ... Salam

9 BiswajitKarmakar May 15 2016 at 14:45

Gunakan LogCat dan coba temukan apa yang menyebabkan aplikasi macet.

Untuk melihat Logcat jika Anda menggunakan Android Studio, tekan ALT + 6 atau

jika Anda menggunakan Eclipse lalu Window -> Open Perspective -> Other - LogCat

Buka LogCat, dari menu drop-down pilih error. Ini akan berisi semua informasi yang diperlukan untuk membantu Anda melakukan debug. Jika itu tidak membantu, posting LogCat sebagai edit untuk pertanyaan Anda dan seseorang akan membantu Anda.

8 felislynx.silae Oct 02 2017 at 22:07

Jika aplikasi Anda karena alasan tertentu mengalami error tanpa stacktrace yang baik. Coba debug dari baris pertama, dan lanjutkan baris demi baris hingga macet. Kemudian Anda akan mendapat jawaban, baris mana yang menyebabkan masalah bagi Anda. Mungkin Anda kemudian dapat membungkusnya menjadi blok coba tangkap dan output kesalahan cetak.

6 Pelpotronic Mar 22 2015 at 15:50

Anda juga bisa mendapatkan pesan kesalahan ini sendiri, tanpa jejak tumpukan atau pesan kesalahan lebih lanjut.

Dalam hal ini, Anda perlu memastikan manifes Android Anda dikonfigurasi dengan benar (termasuk penggabungan manifes apa pun yang terjadi dari pustaka dan aktivitas apa pun yang akan datang dari pustaka), dan memberi perhatian khusus pada aktivitas pertama yang ditampilkan dalam aplikasi Anda di file manifes Anda .

6 naXa Sep 11 2018 at 15:35

Crash selama pengembangan

Coba tool logview favorit saya untuk mendapatkan log dan menganalisisnya selama pengembangan.
Pastikan untuk menandai ./logviewdan ./lib/logview.jarsebagai dapat dijalankan saat dijalankan di Linux.

Jika Anda tidak menyukainya, ada banyak penampil log desktop alternatif untuk Android .

Crash in the wild

Integrasikan alat pelaporan kerusakan waktu nyata seperti Firebase Crashlytics untuk mendapatkan pelacakan tumpukan pengecualian yang tidak tertangani yang terjadi di perangkat pengguna.

Baca Cara Merilis Aplikasi Buggy (Dan Live to Tell the Tale) untuk mengetahui lebih banyak tentang menangani bug di lapangan.

5 KopiBryant May 20 2018 at 00:24

Orang membuat kesalahan, begitu juga dengan pengkodean.

Jika ada yang errorterjadi, selalu periksa logcat dengan teks berwarna merah. Namun Anda dapat mengetahui masalah sebenarnya pada teks berwarna biru dengan garis bawah pada teks berwarna merah tersebut.

Pastikan jika Anda membuat yang baru activity, selalu deklarasikan activitydi dalam AndroidManifestfile.

Jika menambahkan Izin, nyatakan juga di AndroidMainifestfile.

5 Ashish Mar 26 2019 at 11:42

Logcat - Untuk memeriksa log dalam fase pengembangan Android Studio

Pertama-tama, bersihkan Logcat dan biarkan aplikasi macet lagi sehingga Anda hanya bisa mendapatkan detail log yang mogok. Anda harus memeriksa jejak Stack

Sementara, Sayangnya, MyApp telah berhenti. Ada banyak alasan untuk itu. Anda dapat memeriksa log yang sama. Untuk ini, Anda dapat menggunakan Log.e ("TAG", "Message");

Kesalahan umum selama aplikasi crash seperti:

  1. Kesalahan pengkodean (Penggunaan kata kunci yang salah).
  2. Nama properti tidak cocok.
  3. Plugin tidak didukung (mungkin).
  4. Versi tidak cocok (mungkin).
  5. Aktivitas hilang di file AndroidManifest.
  6. Izin tidak ada di file AndroidManifest.
  7. NullPointerException paling umum.
  8. Dinyatakan tetapi tidak ditentukan.

Untuk mengatasi kesalahan aplikasi mogok:

  • Ingatlah poin-poin di atas dan bahaslah.
  • Dengan kesalahan, Anda akan mendapatkan nama file juga dalam warna biru (klik di atasnya dan lompat ke kode dari kesalahan yang terjadi).
4 MehulSolanki May 22 2019 at 17:40

Pertama, Anda perlu memeriksa di mana dan mengapa aplikasi Anda mengalami crash (Unfortunately, MyApp has stopped.).Dengan bantuan LOG, Anda dapat mencari tahu apa yang salah.

Setelah itu, Anda menemukan titik mana aplikasi Anda berhenti memperbaikinya dari titik Anda.

4 zapotec Jun 12 2019 at 20:07

Jika Anda tidak memiliki jenis log yang menarik di terminal Anda (atau tidak terkait langsung dengan aplikasi Anda), mungkin masalah Anda disebabkan oleh perpustakaan asli. Jika demikian, Anda harus memeriksa file "batu nisan" di dalam terminal Anda.

Lokasi default untuk file batu nisan bergantung pada setiap perangkat, tetapi jika demikian, Anda akan memiliki catatan log: Tombstone written to: /data/tombstones/tombstone_06

Untuk informasi lebih lanjut, periksa https://source.android.com/devices/tech/debug .

2 MohsenEmami Mar 16 2020 at 17:18

Juga menjalankan perintah ini di terminal dapat membantu menemukan masalah:

gradlew build > log.txt 2>details.txt

maka Anda harus pergi ke lokasi file gradlew dalam membaca dua file log di atas.