1

我尝试使用 JSON 将数据从我的 android 客户端发送到我的 Web 服务器。

我面临一个问题。由于现在调试了两天多,看来是JSONArray类的toString方法不能正常工作的问题。

我有不能使用 GSON 库的限制。因此,我只处理 JSONArray 和 JSONObject 库。

我构造我的 JSONArray 如下:

ArrayList<SMS> SMSArray = SMSHelper.getSMSDetails(context, rEmail, rPhoneNum);
JSONArray jSMSArray = new JSONArray();

for(int i = 0; i < SMSArray.size(); i++) {
    jSMSArray.put(i, SMSArray.get(i).toJSON());
    Log.wtf("::trace", "JSONArray.get(i).toString(): " + jSMSArray.get(i).toString());
}

Log.wtf("::trace", "JSONArray.toString():" + jSMSArray.toString());

在循环内部,我从 JSONArray 和 ArrayList 中打印出完全相同的字符串。所以似乎将 ArrayList 复制到 JSONArray 工作正常。加上循环后两个 Array 的大小是相同的。

然而,当我在循环之后使用 JSONArray.toString() 时,令人惊讶的是,字符串并不完整,字符串仅打印出包含我的 JSONArray 的 285 个 JSONObject 中的几个 JSONObject!

我想将此 JSONARRAY 发送到我的服务器以在服务器端解析它,但由于 JSONArray 不正确。服务器无法解析接收到的字符串链。收到的字符串链看起来像: [{object1}, ..., {objecti}, {"id", $myId, "thread", $myThread, "content", "hey

我真的希望你们中的一个能够帮助我。这让我发疯;首先我使用了语法for(Object object: ObjectArray),但后来我了解到 JSONArray 不是可迭代对象,所以我尝试将 JSONObject 直接放在特定索引中,但我得到了相同的结果。

这段代码是我硕士论文的一部分,我在这个细节上浪费了很多时间......:/

真的,期待你的回答。

晚安,

比约恩

编辑:我的 JSONObject 是存储在 android 手机中的 SMS。我将它们转换为 JSONObject 的功能如下:

public JSONObject toJSON() {
    JSONObject jSMS = new JSONObject();
    try {
        jSMS.put("id", this.id);
        jSMS.put("thread", this.thread);
        jSMS.put("rEmail", this.rEmail);
        jSMS.put("rPhoneNum", this.rPhoneNum);
        jSMS.put("sPhoneNum", this.sPhoneNum);
        jSMS.put("sName", this.sName);
        jSMS.put("date", this.date);
        jSMS.put("content", this.content);
        jSMS.put("type", this.type);
    } catch (JSONException e) {
        Log.wtf("::trace", Log.getStackTraceString(e));
    }
    return jSMS;
}

EDIT1:当我遍历我的 JSONArray 并使用JSONArray.getJSONObject(i).toString()一切正常时,它会打印出数组的全部内容,当我调用 JSONArray.toString() 方法时,它只会打印出 JSONArray 的开头。我真的开始厌倦了。我不知道什么会导致这样的错误。

4

1 回答 1

1

请参阅Logcat 的大小限制是多少以及如何更改其容量?

每个 logcat 条目都限制为一定数量的字符(取决于您的 android 设备)。很可能一个 285 个对象长的 JSON 数组对于单个 logcat 条目来说太长了,所以它只是在中间切断它。我不认为你的 json 对象有问题(或者如果有,它不是你找到的那个)

于 2015-08-29T15:04:45.743 回答