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



这是我的第一个问题,我希望我没有弄错。

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

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

当我尝试将其转换为String并使用jackson通常的'mapper'解析它时,我得到了可怕的内存不足异常。这让我觉得我需要流这个大json代替。

我去看了这里提供的jackson的例子,但是这个例子似乎没有多大帮助

我想知道如果我不能搜索或者我只是一个简单的愚蠢的编程,但如果有人能指导我一个好的例子,那将是非常愉快的。

my current effort:

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();
               }
           ....
      }
});

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

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

阅读本文了解详细信息:

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

相关内容

  • 没有找到相关文章

最新更新