Android JSONTokener - nextCleanInternal中的Nullpointer异常未被捕获

时间:2014-08-29 15:55:06

标签: android json nullpointerexception parse-platform

我正在使用onCreate()方法中的JSONObject。它被try / catch块包围,我原本认为它会捕获所有异常,但似乎仍然遇到nullpointerexception并且崩溃应用程序。我有检查,以确保我在对象中搜索的字符串不为空/空,我不知道如何保护异常。代码和堆栈跟踪如下:

Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        JSONObject notificationData;
        try {
            notificationData = new JSONObject(bundle.getString("com.parse.Data"));
            if(notificationData.getString("targetUrl") != null && !notificationData.getString("targetUrl").equals("")){
                //do stuff
            }
        } catch (Exception e) {
        }
    }
}

错误在这一行:

notificationData = new JSONObject(bundle.getString("com.parse.Data"));

堆栈追踪:

java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.Test/com.example.Test.MainActivity}:
java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:155)
at org.json.JSONObject.<init>(JSONObject.java:172)
at com.example.Test.MainActivity.onCreate(SourceFile:293)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)

我对在Java / Android中使用JSONObjects不太熟悉。我该怎么做才能防止出现这个nullpointer?

1 个答案:

答案 0 :(得分:1)

实际上并不推荐尝试捕获NPE。

我假设您的代码崩溃,因为bundle.getString("com.parse.Data")实际上是null

我建议检查null,因此请更改为:

if (bundle != null && bundle.getString("com.parse.Data") != null)

这样可以避免您获得的NPE。如果您设法将String从捆绑包中取出,则在尝试构建JSONObject时可能仍会遇到其他异常。无法帮助你,需要查看更多代码。