Android:流式传输从 loopj 的 AsyncHttpClient 生成的大型 JSON 数组

Android: Stream a large JSON Array produced from loopj's AsyncHttpClient

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

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

[
    {
     "label1":"value1",
     "label2":"value2",
     "label3":"value3",
     ....
    },
    {
     "label1":"value1",
     "label2":"value2",
     "label3":"value3",
     ....
    },
    ....
]

当我尝试将其转换为 String 并使用 jackson 常用的 'mapper' 对其进行解析时,我遇到了可怕的内存不足异常。这让我觉得我需要流式传输这么大的 json。

我去看了 jackson 提供的例子 here,但是这个例子似乎对我帮助不大

我想知道是我没有搜索能力,还是我在编程方面只是个笨蛋,但如果有人能指导我举个好例子,我会很高兴。

我目前的努力:

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数据一一解析:

阅读本文了解详情:

http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/

您应该避免 response.toString() 来电。您可以从数组中获取一个元素并解析它。它不是真正的流媒体,但它显着减少了内存消耗。