我正在尝试添加另一个JSONObject作为根JSONObject的子代,它给了我JSONObject。我想这是一个愚蠢的错误,但直到现在我仍然无法找到解决方案。
这是我的代码 -
void sendCallStatusResponse(Message lastMessage) throws JSONException {
String fromName = lastMessage.getFrom();
JSONObject requestRoot = new JSONObject(lastMessage.getBody());
JSONObject callData = requestRoot.getJSONObject("call_data");
String callToStr = callData.getString("call_to");
String serverId = requestRoot.getString("server_id");
long logTime = System.currentTimeMillis();
String lastCallDuration = getLastCallInfoStr();
JSONObject root = new JSONObject();
JSONObject callDataRoot = new JSONObject();
root.put("cmd_id", "callstatus");
root.put("stack_id", "" + logTime);
root.put("server_id", serverId);
root.put("logtime", "" + new Date());
callDataRoot.put("call_to", callToStr);
callDataRoot.put("call_time", lastCallDuration);
callDataRoot.put("ring_time", lastCallDuration);
callDataRoot.put("status", "");
callDataRoot.put("deposition_key", "");
callDataRoot.put("id_campaign", "");
if (SOME_CONDITION)
callDataRoot.put("call_type", "outgoing");
else if (SOME_CONDITION)
callDataRoot.put("call_type", "incoming");
else
callDataRoot.put("call_type", "");
root.put("call_data", callDataRoot); //this is where the exception is thrown
root.put("logtime", "" + logTime);
}
例外是 -
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ org.json.JSONException: Value recording_file of type java.lang.String cannot be converted to JSONObject
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:159)
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:172)
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at com.appcall.XMPPService.sendCallStatusResponse(XMPPService.java:408)
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at com.appcall.CallOverlay.onRefreshData(CallOverlay.java:91)
09-29 12:28:14.837 8785-8785/com.appcall W/System.err﹕ at com.appcall.XMPPService.sendRefreshData(XMPPService.java:189)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at com.appcall.XMPPService.sendExitCode(XMPPService.java:287)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at com.appcall.XMPPService.onCallStateChanged(XMPPService.java:572)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at com.appcall.PhoneStateMonitor.onCallStateChanged(PhoneStateMonitor.java:127)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:369)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-29 12:28:14.847 8785-8785/com.appcall W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
如果我使用root.put()方法将另一个JsonObject作为子进程,我不确定是什么问题?我之前已经完成了它并且它正在工作,但不是在这种情况下。
答案 0 :(得分:1)
我尝试了从JSONObject root = new JSONObject();
开始的代码段并将值替换为空白&#34;&#34;需要的字符串。我能够root.put("call_data", callDataRoot)
没有任何错误。我在最后打印root.toString()
进行了验证。没有例外。因此,如上所述,将子JSONObject添加到另一个JSONObject。
错误来自您使用的值,因此请确保您没有在服务器返回的JSON字符串数据中或在用于创建JSONObject的值中获得任何虚假字符。请参阅this SO question on ways to debug data/strings coming in。