Android:从Webservice获取大量Json数据- get OutOfMemoryError



我的Android应用程序需要通过webservice从外部数据库检索大数据。数据很大,大约有60000条记录(~ 21MB)。我正在使用AsyncHttpClient,但我从来没有得到在onSuccess方法的结果,由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)

这是Android平台的限制,所以你必须选择另一种设计,例如分页webservice调用

最新更新