Java Android:Stream从loopj';异步HttpClient
这是我的第一个问题,我希望我没有犯任何错误 我从返回值“onSuccess()”中得到了一个很长的json数组,格式如下: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", ....
[
{
"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不是那么复杂。