當我嘗試解散FragmentDialog時,我的應用程序有時會崩潰。
這裏的日誌:NullPointerException:試圖調用虛擬方法'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()'
Process: com.xxx, PID: 9981
java.lang.RuntimeException: Error receiving broadcast Intent { act=xxxx flg=0x10 (has extras) } in xxxxxx
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:893)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5438)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()' on a null object reference
at android.app.DialogFragment.dismissInternal(DialogFragment.java:296)
at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:277)
at xxxxx.updateStatus(BaseAppCompatActivity.java:96)
at xxxxx.access$000(BaseAppCompatActivity.java:43)
at xxxxx$1.onReceive(BaseAppCompatActivity.java:79)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:883)
xxxxx.updateStatus(BaseAppCompatActivity.java:96)
此行是試圖駁回DialogFragment:
mDialogFragment.dismissAllowingStateLoss();
一個DialogFragment是在我的活動。
private SimpleBlockedDialogFragment mDialogFragment = SimpleBlockedDialogFragment.newInstance();
因此mDialogFragment不爲空。
我顯示的對話框是這樣的:
FragmentTransaction ft = getFragmentManager().beginTransaction();
mDialogFragment.updateMessage("xxx");
mDialogFragment.show(ft, "block_dialog");
並關閉對話框如下:
mDialogFragment.dismissAllowingStateLoss();
有時候,我會告訴對話框只有一次,但駁回了不止一次。但我不認爲這會導致崩潰。
這裏是在DialogFragment的dismissInternal功能:
void dismissInternal(boolean allowStateLoss) {
if (mDismissed) {
return;
}
mDismissed = true;
mShownByMe = false;
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
mViewDestroyed = true;
if (mBackStackId >= 0) {
getFragmentManager().popBackStack(mBackStackId,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
mBackStackId = -1;
} else {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(this);
if (allowStateLoss) {
ft.commitAllowingStateLoss();
} else {
ft.commit();
}
}
}
日誌告訴我,getFragmentManager()返回NULL。我不知道爲什麼會發生這種情況。
如何正確關閉FragmentDialog?
更新:
我嘗試android.support.v4.app.FragmentTransaction,而且還得到一個異常。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference
at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:196)
at android.support.v4.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:177)
幫助〜
可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –
@LonnieZamora這個NullPointerException發生在android框架中。 –
是什麼讓你這麼想? –