0

我正在尝试添加另一个 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 作为子对象,我不确定有什么问题?我以前做过,它正在工作,但在这种情况下不是。

4

1 回答 1

1

我尝试了您的代码片段JSONObject root = new JSONObject();,并在需要时用空白“”字符串替换值。我能够做到root.put("call_data", callDataRoot)没有任何错误。我通过root.toString()在最后打印验证。没有看到异常。因此,像上面那样将子 JSONObject 添加到另一个 JSONObject 是可行的。

错误来自您正在使用的值,因此请确保您在服务器返回的 JSON 字符串数据或用于创建 JSONObject 的值中没有收到任何虚假字符。有关调试数据/字符串的方法,请参阅此 SO 问题

于 2014-09-29T09:06:09.920 回答