Bir etkinliğim ve bir parça yığınım olduğu bir Android uygulamasına sahibim.NullPointerException. Nasıl çözülür?
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.FragmentManager.popBackStack(java.lang.String, int)' on a null object reference
at com.company.app.Fragment$7$2.onClick(Fragment.java:397)
at android.view.View.performClick(View.java:5197)
at android.view.View$PerformClick.run(View.java:20926)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Bu hata üretir kodu: Crashlytics kullanarak
, aşağıdaki Exception
tek bir örneğini almış bu yapmış test dayanarak
okButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
// The next line produces the Exception
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Other code...
}, 250);
}
});
Uygulama, bu Özel Durumun oluştuğu kullanıcı ve yalnızca bir kez gerçekleşmiş olan gerçek, koşulların bazı garip bir şekilde bir araya gelmesi durumunda bu Exception
'un oluştuğunu düşünüyorum. (Temel olarak, bu Exception
yeniden üretemiyorum.) Uygulamamın arkaplanı uygulamamı ve daha sonra tekrar devam etmesi gerektiğini varsayarak, getFragmentManager()
aramasının null
değerini döndürdüğünü kabul ediyorum.
Yani, ben (bir GitHub deposuna uygulanan düzeltme olarak buldum) Aşağıdaki gibi kodla Bu "düzeltme" biliyor:
FragmentManager fm = getFragmentManager();
if (fm != null) fm.popBackStack();
ben kod yukarıdaki "çözecektir fark ederken "Bu sorunu NPE
, (böylece uygulamayı çökmesini durdurarak) önleyecektir, bu benim app istediği gibi çalışmasına izin vererek sorunu" düzeltmek "değil. Söz konusu Fragment
böyle, parçaların bir yığın içerisinde 3'tür:
#1 --> #2 --> #3
uygulaması için istenen davranışı görünür olma Fragment
1. geri kahpeden bu düğmeye tıklama cevap etmektir. Yukarıdaki kodda yalnızca ekleme, uygulamanın kilitlenmesini engelliyor gibi görünüyor, ancak uygulamanın kullanıcı arayüzünü istenen şekilde değiştirmiyor.
Uygulamam tekrar başladığında, "parçalanma durumu" patlak vermeyecek şekilde ne yapıyorum?
Tam olarak aynı sorunu yaşıyorum, parçayı kapatmak ve bir öncekine geri dönmek için bir düğmeyle getFragmentManager(). PopBackStack() öğesini çağırıyorum. Ben de onu üretemiyorum ama hata gerçek bir sorun olmak için yeterince sık. –
Bu sorunla karşı karşıyayım bir çözüm buldunuz mu? –