1
我的Android应用程序需要通过webservice从外部数据库中检索大量数据。数据很大,约60000条记录(〜21MB)。我使用的是AsyncHttpClient,但我从来没有回到由OutOfMemoryError引起的onSuccess方法中的结果。Android:从Webservice中检索大型Json数据 - 获取OutOfMemoryError
public void getData(final Handler handler) {
if (Log.isLoggable(TAG, Log.INFO)) {
log.info("PreSynch: Start loading " + objectTypeName);
}
(new AsyncHttpClient()).get(presyncUrl, requestParams, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
responseResult(response);
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray result) {
responseResult(result);
}
private void responseResult(Object result) {
// Never reach this code
log.info(objectTypeName + " successfully loaded");
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
// some logs
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
// some logs
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
// some logs
}
});
}
的错误是:
E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-209
java.lang.OutOfMemoryError
at java.util.ArrayList.add(ArrayList.java:114)
at org.json.JSONArray.put(JSONArray.java:166)
at org.json.JSONTokener.readArray(JSONTokener.java:430)
at org.json.JSONTokener.nextValue(JSONTokener.java:103)
at com.loopj.android.http.JsonHttpResponseHandler.parseResponse(JsonHttpResponseHandler.java:216)
at com.loopj.android.http.JsonHttpResponseHandler$1.run(JsonHttpResponseHandler.java:120)
at java.lang.Thread.run(Thread.java:856)
您正在尝试将整个文件加载到数组中......您的内存不足......可能不是那样做的?或者你可以http://downloadmoreram.com;) –
你有没有考虑过分批处理它?一次说1000条记录?有了这些数据,我会担心它会超时。 – b85411
你能告诉我你正在获取哪种类型的数据吗? – KishuDroid