【问题标题】:Memory-efficiently downloading and parsing JSON内存高效地下载和解析 JSON
【发布时间】:2014-12-15 17:18:45
【问题描述】:

我正在寻找一些关于下载和解析 JSON 的建议,因为我收到了来自用户的崩溃日志,这些日志告诉我他们遇到了 OutOfMemoryError。

我现在使用的是以下代码:

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, Integer.parseInt(connectionTimeOut + "000"));
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(theUrl);
ResponseHandler<String> handler = new BasicResponseHandler();
result = client.execute(request, handler);
return result;

结果我通过 JSONObject json = new JSONObject(result) 创建了一个 json 对象,并从这个 JSONObject 创建了我自己的自定义对象。

【问题讨论】:

    标签: android json download


    【解决方案1】:

    我会首先检查 OOME 是由处理大型 JSON 对象引起的。

    如果是这样,或许可以将 GSON 等 JSON 库与 Retrofit 结合使用,它允许您直接从输入流中读取对象,而不是先将整个输入流读取为字符串。

    如果这太重了(例如,如果 JSON 对象嵌套很深,缓冲输入流可能会导致设备内存不足),您可以考虑编写自己的 GSON TypeAdapter 来读取输入的特定区域流。

    【讨论】:

    • 并不是 JSON 对象的网络很深,而是我返回的数据可能有很多 jsonobjects。但是我试试 GSON 看看它是如何工作的。
    • 按照 Paul 的建议,您应该尝试改造,设置起来非常容易,并且会为您节省大量时间和精力。也可以很好地与 RxJava 配合使用。
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2018-05-19
    相关资源
    最近更新 更多