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()
来电。您可以从数组中获取一个元素并解析它。它不是真正的流媒体,但它显着减少了内存消耗。
这是我的第一个问题,希望我没有犯错..
我从 '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()
来电。您可以从数组中获取一个元素并解析它。它不是真正的流媒体,但它显着减少了内存消耗。