JSONArray.toString() 在 Java 中不工作

JSONArray.toString() not working in Java

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

我遇到了一个问题。经过两天多的调试,似乎是JSON数组class的toString方法没有正常工作的问题。

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

我按如下方式构建我的 JSON 数组:

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 似乎工作正常。再加上循环后两个数组的大小是一样的。

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

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

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

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

我真的很期待你的回答。

晚安,

比约恩

编辑: 我的 JSON对象是存储在 android 手机 phone 中的 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;
}

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

What is the size limit for Logcat and how to change its capacity?

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