android中Json解析时GCM推送通知中的NullPointerException
在Gcm推送通知中解析Json时,我遇到以下堆栈跟踪错误: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
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相同的代码工作正常。我不知道为什么会出现此问题