Not: Bu cevap Android Studio 2.2.2'yi 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'a bakmaktır, Android Studio'nun altında menülerin listesini içeren bir araç çubuğu vardır:
"Android Monitör" ü tıklayın (Yukarıdaki resimde altını çizdiğim. ^)
Şimdi, böyle bir şey alacaksınız:
" Verbose
" İle " " arasında değişiklik yapın Error
Artık yalnızca size kaydedilen hataları gösterecek. Tüm bu hatalar için endişelenmeyin (eğer varsa).
Tamam. Şimdi, uygulamanızı kilitlemek için ne yaptığınızı yapın. Uygulamanız kilitlendikten sonra logcat'inize gidin. Çok fazla şey içeren yeni bir kilitlenme günlüğü bulmalısınız at:x.x.x
: ve Caused by: TrumpIsPresidentException
örneğin. Caused by:
Logcat'inizdeki ifadeye gidin .
Sonraki için o Caused By:
oldu, İstisna olmalıdır. Benim durumumda, bir RuntimeException
ve altında mavi bir bağlantı içeren bir satır olmalıdır :
O takdirdeCaused by:
bunun altında mavi bir metin yerde bir çizgi var ETMEZ, sonra başka bakmak Caused by:
yapar.
Bu mavi bağlantıyı tıklayın . Sizi sorunun oluştuğu yere götürmelidir. Benim durumumda, bu satırdan kaynaklanıyordu:
throw new RuntimeException();
Şimdi neden çöktüğünü biliyorum. Çünkü istisnayı kendim atıyorum. Bu bariz bir hataydı .
Ancak, başka bir hatayla karşılaştığımı varsayalım:
java.lang.NullPointerException
Logcat'imi kontrol ettim, bana verdiği mavi bağlantıya tıkladım ve beni buraya götürdü:
mTextView.setText(myString);
Şimdi hata ayıklamak istiyorum. Göre bu StackOverflow soru , bir NullPointerException şey olduğunu söylüyor null
.
Neyin boş olduğunu bulalım . İki olasılık var. Ya mTextView
boştur ya myString
da boştur. Öğ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ıklama" olarak değiştirmek istiyoruz. Hata ayıklayarak oturum açtığımızdan beri. İşte tüm Log 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.d
Debug'u kontrol ediyoruz. Bu yüzden hata ayıklamak için değiştirdik.
Bildirimin Log.d
ilk parametresi vardır, bizim durumumuzda "AppDebug". Logcat'in sağ üst kısmındaki "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" ne "Uygulama Hata Ayıklama" yazın. "Tamam" ı tıklayın. Şimdi, logcat'te 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 ettim.
Ben var private TextView mTextView
benim sınıfının en üstünde ilan etti. Ama ben onu tanımlamıyorum.
Temelde bunu onCreate () 'de yapmayı unuttum:
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
mTextView
Uygulamamın ne olduğunu söylemeyi unuttuğum için BU NEDEN boş. Bu satırı ekledim, uygulamamı çalıştırıyorum ve şimdi uygulama çökmüyor.