Android - Java can't read the whole JSON file
我的Apps代码出现一些问题,无法读取JSON文件。
因此,我的应用程序从服务器下载json文件,然后使用此AsyncTask读取它们。
这对于较小的json文件(大约2KB)可以正常工作,但是对于较大的json文件(大约1.3MB)仅加载第一行。
我不确定导致问题的原因,我坚信字符串不能存储那么多字符,但是我在这里读到Numbers的最大值约为20亿(该json文件不应该存在)。
我希望你能帮帮我! 提前致谢!
-
发布您的Async Task任务代码,没有它就很难提供帮助
-
这可能是android.util.Log截断"打印"内容的限制,不一定是您的应用无法读取整个文件的问题。 如果您好奇,请尝试写入文件而不是Log。
-
那不是我已经做的吗? 在JSONDownloader中下载文件,然后在JSONArrayAsyncTask中读取文件? 编辑:哦,您的意思是调试行? 虐待尝试。 谢谢
-
哼哼 如果将其记录到文件中,则可以看到整个json文件已被读取。 但是,这意味着在创建JSONObject的行中出现了问题。JSONObject obj = new JSONObject(stringBuilder.toString()。trim()); 因为它在创建后没有到达Log语句,但是由于"进度对话框"消失而结束了异步任务。
我已修正错误。 这不是由String短造成的,而是由包含错误的JSON引起的(我没想到,因为它是由工具创建的)。
无论如何,谢谢您的帮助! :)
使用大型JSON文件时,您应该保留该文件,然后再读取它。
我假设JSON文件具有比简单API HTTP请求更多的信息。
-
那就是我实际上所做的。 我从服务器上的JSONDownloader类下载json文件,然后在JSONArrayAsyncTask上读取它。
-
@ChristianOder如果仅限于可用堆,请尝试对请求进行分页,或拆分为较小的文件,这可能吗?
-
已经修复了它,我的JSON已损坏(我很笨)。 经验教训,永远不会100%信任在线工具。
-
啊哈哈哈! 很高兴您找到了解决方案
基于Raghav的信息以及与Ted的信息的关系,您可能会受到应用程序可用堆的限制。
-
因此,没有办法解决此问题吗? 一个人应该以为我不是世界上第一个尝试在Android中读取1.3MB JSON文件的人:(同样,当文件为1.3MB,总长度为1,303,636个字符时,为什么它不适合16MB的堆? 长度是2,147,483,647,而仅加载前4065个字符(根据代码中的日志行)?