我从我的应用程序崩溃时发送的错误日志中收到此异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{<my activity>}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3553)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.support.v4.app.DialogFragment.onActivityCreated(DialogFragment.java:368)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1486)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:552)
at <my FragmentActivity wrapper>.onStart(BaseActivity.java:16)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1167)
at android.app.Activity.performStart(Activity.java:5216)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2073)
... 12 more
我无法重现它,导致此崩溃的日志似乎并不表示显示了任何DialogFragment
。 This is the line in the support library that is causing the crash
答案 0 :(得分:2)
mDialog为null,表示您的对话框未正确创建。我有相同的情况会发生这种情况,但在非常有限的情况下(与屏幕旋转无关,但它是我可以100%重现的东西),它与onCreateView()没有正确创建对话框,导致null mDialog。 onCreateView()可以用来创建一个对话框 - http://developer.android.com/reference/android/app/DialogFragment.html的基本对话框部分甚至显示了这一点 - 但我证明它并不总是可靠的。但是,在我的崩溃场景中,我发现使用onCreateDialog()而不是onCreateView()将始终有效,即使我使用的是与onCreateView()使用的布局和数据相同的布局和数据。因此,当我将DialogFragment用作对话框并解决了问题时,我将代码更改为使用onCreateDialog()。所以这是你可能要检查的一件事。
如果你想要一个强力方法来阻止崩溃(虽然为什么mDialog为null的根本原因仍然存在),你可以使用这个代码 - 我成功使用这个代码,直到我找到上面的真正问题:
@Override
public void onActivityCreated(Bundle arg0) {
if (getDialog() == null ) { // Returns mDialog
// Tells DialogFragment to not use the fragment as a dialog, and so won't try to use mDialog
setShowsDialog( false );
}
super.onActivityCreated(arg0); // Will now complete and not crash
}
答案 1 :(得分:1)
答案在这里: DialogFragment : NullPointerException (support library)
添加此代码:
@Override
public Dialog onCreateDialog (Bundle savedInstanceState)
//Create custom dialog
if (dialog == null)
super.setShowsDialog (false);
return dialog;
}