【发布时间】:2015-11-23 18:05:35
【问题描述】:
我尝试使用 JSON 将数据从我的 android 客户端发送到我的网络服务器。
我遇到了一个问题。由于现在调试了两天多,看来是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", "嘿
我真的希望你们中的一个能够帮助我。这让我发疯;首先我使用语法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;
}
编辑1:
当我遍历我的 JSONArray 并使用 JSONArray.getJSONObject(i).toString() 一切正常时,它会打印出数组的全部内容,当我调用 JSONArray.toString() 方法时,它只会打印出 JSONArray 的开头。我真的开始厌倦了。我不知道什么会导致这样的错误。
【问题讨论】:
-
尝试通过简单替换 JSONObject 来运行您的代码。工作得很好。尝试在运行 for 循环之前记录数组的大小,以确保它是 295 项长。
-
好吧,似乎在构造 JSONArray 的循环之后,其中确实有 295 个项目,所以我不明白为什么当我对整个 JSONArray 使用 toString() 方法时,它只是打印出 JSONArray 的开头并切入 JSONObject 的中间。因此,我的服务器无法理解接收到的 JSON 内容,也无法将数据存储在我的数据库中……我存储在 JSONArray 中的 JSONObject 来自 long、int、string 和 Date 类型,如果有帮助的话!跨度>
-
你能给你的一个对象举一个 json 字符串的例子吗?我假设
{object1}是一种简化,因为它不是有效的 JSON 字符串。 -
@CurlyCorvus,我改进了我的问题 :)
-
你有调试器吗?调试器中
jSMSArray.toString()的值是多少? (不是日志)
标签: android json serialization client object-to-string