【发布时间】:2015-04-15 21:22:15
【问题描述】:
我有一个广播接收器,它从 onRecieve 方法的意图中获取 JSONObject。然后它从 JSONObject 中获取一些数据。
try {
Bundle bundle = intent.getExtras();
jsonData = bundle.getString("com.parse.Data");
object = new JSONObject(jsonData);
action = object.getString("action");
id = object.getString("id");
userQuery.whereEqualTo("objectId", id);
} catch (JSONException e) {
}
当我运行应用程序时,这里会导致空指针异常...
object = new JSONObject(jsonData);
我运行了调试器并停止了
userQuery.whereEqualTo("objectId", id);
Object 不是 null,action、id 或 jsonData 也不是。我对此有点困惑。这是在此之后运行的下一个代码块...
userQuery.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> parseUsers, ParseException e) {
user = parseUsers.get(0);
if(action.equals(connectAction)){
if(!connectedB){
connectedB = true;
Intent broadcast = new Intent();
broadcast.setAction(yesAction);
broadcast.putExtra("extra","yes");
context.sendBroadcast(broadcast);
}
}
}
});
这只是在 Parse 中搜索具有相同对象 ID 的用户。然后一旦它找到一个,它就会向我在另一个活动中拥有的另一个广播接收器发送一个广播。在此之后没有其他代码。这是原木猫。
04-15 23:04:30.983 11802-11802/joke.app.randomchat E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: joke.app.randomchat, PID: 11802
java.lang.RuntimeException: Unable to start receiver joke.app.randomchat.MessageReciever: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2580)
at android.app.ActivityThread.access$1700(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
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:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
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 joke.app.randomchat.MessageReciever.onReceive(MessageReciever.java:57)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2573)
第 57 行是我上面谈到的那一行。我该如何解决这个问题?
这是我在 userQuery 处停止它时的值...
Bundle[{com.parse.Data={"id":"at790nlYIN","action":"joke.app.randomchat.intent.CONNECT","push_hash":"d41d8cd98f00b204e9800998ecf8427e"}, com.parse.Channel=null}]
这是对象
{"action":"joke.app.randomchat.intent.CONNECT","id":"at790nlYIN","push_hash":"d41d8cd98f00b204e9800998ecf8427e"}
动作字符串
joke.app.randomchat.intent.CONNECT
标识字符串
at790nlYIN
json数据
{"id":"at790nlYIN","action":"joke.app.randomchat.intent.CONNECT","push_hash":"d41d8cd98f00b204e9800998ecf8427e"}
【问题讨论】:
-
你确认
jsonData不为空吗? -
是的。起初我以为是这样,但它包含正确的信息。
-
如果jsonData的内容不太大,或者只是其中的一部分,你可能想显示它。
-
检查你收到的json字符串是否有效。
-
com.parse.Data 是您通过意图发送的字符串的键吗?
标签: android json parse-platform nullpointerexception broadcastreceiver