【问题标题】:Android - Java can't read the whole JSON fileAndroid - Java 无法读取整个 JSON 文件
【发布时间】:2015-08-19 17:11:10
【问题描述】:

我的应用程序代码在读取 JSON 文件时出现了一些问题。 所以我的 App 从我的服务器下载了 json 文件,然后使用this AsyncTask 来读取它们。

这适用于较小的 json 文件(大约 2KB),但较大的文件(大约 1.3MB)只加载第一行。

我不确定是什么导致了问题,我认为字符串无法存储那么多字符,但后来我读到here,数字的最大值约为 20 亿(不应超过json 文件)。 我希望你可以帮助我!提前致谢!

【问题讨论】:

  • 发布你的 Async Task 任务代码,没有那个就很麻烦
  • 这可能是android.util.Log 截断“打印”内容的限制,不一定是您的应用程序没有读取整个文件的问题。如果您好奇,请尝试写入文件而不是 Log
  • 这不是我已经做的吗?在 JSONDownloader 中下载文件,然后在 JSONArrayAsyncTask 中读取文件?编辑:哦,你的意思是调试线?我会试试的。谢谢
  • 哼哼有趣。如果我将它记录到一个文件中,我可以看到整个 json 文件被读取。但是,这意味着创建 JSONObject 的行有问题 JSONObject obj = new JSONObject(stringBuilder.toString().trim());因为它在创建后没有到达 Log 语句,但是它结束了异步任务,因为我的进度对话框消失了。

标签: java android json


【解决方案1】:

根据 Raghav 的信息 here,以及它与 Ted 的信息 here 的关系,您可能会受到应用程序可用堆的限制。

【讨论】:

  • 所以没有办法解决这个问题?应该认为我不是世界上第一个尝试在 Android 中读取 1.3MB JSON 文件的人 :( 另外,当文件为 1.3MB,总长度为 1,303,636 个字符时,为什么它不适合 16MB 堆呢?最大字符串长度为 2,147,483,647,而是仅加载前 4065 个(根据代码中的日志行)字符?
【解决方案2】:

处理大型 JSON 文件时,您应该保存该文件,然后再读取它。

我假设 JSON 文件比简单的 API HTTP 请求包含更多信息。

【讨论】:

  • 这就是我实际所做的。我在 JSONDownloader 类中从我的服务器下载 json 文件,然后在 JSONArrayAsyncTask 上读取它。
  • @ChristianOder 如果限制在可用堆,尝试对请求进行分页,或者拆分成更小的文件,这可能吗?
  • 已经修复了,我的 JSON 坏了(愚蠢的我)。经验教训,永远不会 100% 信任在线工具。
  • 啊哈哈哈!很高兴您找到了解决方案
【解决方案3】:

我修正了我的错误。这不是由字符串太短引起的,而是由包含错误的 JSON 引起的(我没想到,因为它是由工具创建的)。 无论如何感谢您的帮助! :)

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2019-10-18
    相关资源
    最近更新 更多