Java Android:Stream从loopj';异步HttpClient

Java Android:Stream从loopj';异步HttpClient,java,android,json,jackson,loopj,Java,Android,Json,Jackson,Loopj,这是我的第一个问题,我希望我没有犯任何错误 我从返回值“onSuccess()”中得到了一个很长的json数组,格式如下: [ { "label1":"value1", "label2":"value2", "label3":"value3", .... }, { "label1":"value1", "label2":"value2", "label3":"value3", ....

这是我的第一个问题,我希望我没有犯任何错误

我从返回值“onSuccess()”中得到了一个很长的json数组,格式如下:

[
    {
     "label1":"value1",
     "label2":"value2",
     "label3":"value3",
     ....
    },
    {
     "label1":"value1",
     "label2":"value2",
     "label3":"value3",
     ....
    },
    ....
]
当我尝试将其转换为字符串并使用jackson常用的“映射器”解析它时,我遇到了可怕的内存不足异常。这让我觉得我需要流式传输这个大型json

我看了杰克逊的例子,但这个例子似乎对我帮助不大

我不知道我是否不会搜索,或者我只是一个编程方面的傻瓜,但如果有人能告诉我一个好的例子,我会非常高兴

我目前的努力:

client.get(
     get_all_item_url,
     new JsonHttpResponseHandler() {
       @Override
       public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable e) {
                        ....
                        }


      @Override
      public void onSuccess(JSONArray response) {
           ObjectMapper mapper = new ObjectMapper();
           ProductModel[] productModels = null;
           try {
               productModels = mapper.readValue(response.toString(),TypeFactory.defaultInstance().constructArrayType(ProductModel.class));
               } catch (IOException e) {
                    e.printStackTrace();
               }
           ....
      }
});

对于大型JSON响应,必须使用流技术。它逐个解析JSON数据:

有关详细信息,请阅读本文:


您应该避免调用
response.toString()。您可以从数组中获取一个元素并对其进行解析。它不是真正的流式传输,但可以显著减少内存消耗。

您是否尝试在本地保存JSON以查看它有多大?2MB。它大约值3000条记录……请先尝试减少该响应,如果是您设计的,恐怕我无法减少响应,因为它是由另一个人设计的。您可以使用哪些参数?返回2 MB json没有意义。。。但是如果你没有其他方法,考虑把“响应流”保存到文件中,然后处理那个文件。我想我现在试一下,因为JSON不是那么复杂。