Android 从Intent中检索额外内容时出现奇怪的NPE

Android 从Intent中检索额外内容时出现奇怪的NPE,android,android-intent,nullpointerexception,bundle,Android,Android Intent,Nullpointerexception,Bundle,当我启动CalendarPopUp活动时,我会得到一个NullPointerException 这是我的密码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setUpWindow(); Intent intent = getIntent(); Bundle extras = intent.getExtras();

当我启动CalendarPopUp活动时,我会得到一个
NullPointerException

这是我的密码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setUpWindow();
    Intent intent = getIntent();
    Bundle extras = intent.getExtras(); // This is Line 37
    boolean isForResult = extras.containsKey("result");
            //...
}
这是个例外

07-30 09:33:47.269: E/AndroidRuntime(19979): FATAL EXCEPTION: main
07-30 09:33:47.269: E/AndroidRuntime(19979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.moveinblue.planner/com.moveinblue.planner.utils.popup.CalendarPopup}: java.lang.NullPointerException
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread.access$600(ActivityThread.java:132)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.os.Looper.loop(Looper.java:137)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread.main(ActivityThread.java:4575)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at java.lang.reflect.Method.invokeNative(Native Method)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at java.lang.reflect.Method.invoke(Method.java:511)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at dalvik.system.NativeStart.main(Native Method)
07-30 09:33:47.269: E/AndroidRuntime(19979): Caused by: java.lang.NullPointerException
07-30 09:33:47.269: E/AndroidRuntime(19979):    at com.moveinblue.planner.utils.popup.CalendarPopup.onCreate(CalendarPopup.java:37)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.Activity.performCreate(Activity.java:4465)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-30 09:33:47.269: E/AndroidRuntime(19979):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
07-30 09:33:47.269: E/AndroidRuntime(19979):    ... 11 more
有人能帮我吗

调试后,我知道intent的mExtras对象为null(intent实际上不是null,但它的大多数内部对象都是null)。当然,当调用
getExtras()
时,它返回null;当调用
containsKey()
时,它将抛出一个
NullPointerException
如果没有向intent()添加额外的内容,那么
getExtras()
方法将返回null。首先尝试将该
extra
添加到intent,然后启动
CalendarPopUpActivity
,然后从
intent
中提取此

编辑: 如果你不总是需要额外的,那么先像这样检查它

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setUpWindow();
    Intent intent = getIntent();
    Bundle extras = intent.getExtras(); // This is Line 37
    if (extras != null) {
        boolean isForResult = extras.containsKey("result");
        //...
    }
}

通过这种方式,您将能够检测到意图中是否有额外的内容,并从
NullPointerException

发布您如何启动活动的代码中保存您。该应用程序中有近20个位置调用它。失败的是一个常规的无附加的意图。为什么不检查
getExtras()
null
?请检查我编辑的答案。是的,但是这个弹出窗口是从很多地方调用的,我并不总是需要向它传递额外的内容。