android中Json解析时GCM推送通知中的NullPointerException

android中Json解析时GCM推送通知中的NullPointerException,android,json,android-asynctask,google-cloud-messaging,Android,Json,Android Asynctask,Google Cloud Messaging,在Gcm推送通知中解析Json时,我遇到以下堆栈跟踪错误: 12-01 13:51:15.390: E/AndroidRuntime(18278): FATAL EXCEPTION: AsyncTask #1 12-01 13:51:15.390: E/AndroidRuntime(18278): Process: com.example.imageslideshow, PID: 18278 12-01 13:51:15.390: E/AndroidRuntime(18278): java.la

在Gcm推送通知中解析Json时,我遇到以下堆栈跟踪错误:

12-01 13:51:15.390: E/AndroidRuntime(18278): FATAL EXCEPTION: AsyncTask #1
12-01 13:51:15.390: E/AndroidRuntime(18278): Process: com.example.imageslideshow, PID: 18278
12-01 13:51:15.390: E/AndroidRuntime(18278): java.lang.RuntimeException: An error occurred while executing doInBackground()
12-01 13:51:15.390: E/AndroidRuntime(18278):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.lang.Thread.run(Thread.java:841)
12-01 13:51:15.390: E/AndroidRuntime(18278): Caused by: java.lang.NullPointerException
12-01 13:51:15.390: E/AndroidRuntime(18278):    at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at org.json.JSONTokener.nextValue(JSONTokener.java:94)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at com.lociiapp.HomeActivity.getResult(HomeActivity.java:532)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at com.lociiapp.HomeActivity.access$0(HomeActivity.java:527)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at com.lociiapp.HomeActivity$sendMesgTask.doInBackground(HomeActivity.java:594)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at com.lociiapp.HomeActivity$sendMesgTask.doInBackground(HomeActivity.java:1)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-01 13:51:15.390: E/AndroidRuntime(18278):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-01 13:51:15.390: E/AndroidRuntime(18278):    ... 4 more
下面是发生空指针异常的代码

private String getResult(String response) {

        String test = "";
        try {
            JSONObject json = (JSONObject) new JSONTokener(response)
                    .nextValue();
            test = json.getString("responseCode");
        } catch (JSONException e) {

        }
        return test;
    } 

根据
JSONTokener
的文档:

不允许为Null,并将生成标记器 调用方法时抛出NullPointerException的

因此,您可以简单地放置一个空检查

private String getResult(String response) {

        String test = "";
        if (!TextUtils.isEmpty(response)) {
            try {
                JSONObject json = (JSONObject) new JSONTokener(response)
                        .nextValue();
                test = json.getString("responseCode");
            } catch (JSONException e) {

            }
        }
        return test;
    }

如果您的响应为空,则json.getString()将抛出NLPT,这是正常的,但通知未发送到设备。还有一件事,我无法从2g和WiFi发送通知,而3g相同的代码工作正常。我不知道为什么会出现此问题