构建JSON对象时的Java/Android:java.lang.OutOfMemoryError

jmi*_*hra 8 java android json webrequest

我从公共数据库URI http://data.seattle.gov/api/views/3k2p-39jp/rows.json导入JSON数据, 行直到445454.我使用以下代码构建JSON对象整个数据.

   HttpGet get = new HttpGet(uri);
   HttpClient client = new DefaultHttpClient();
   HttpResponse response = client.execute(get);
   BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    StringBuilder builder=new StringBuilder();
for(String line=null;(line = reader.readLine()) != null;){
      builder.append(line).append("\n");
    }
  JSONTokener jsonTokener=new JSONTokener(builder.toString());
  JSONObject finalJson=new JSONObject(jsonTokener);
  JSONArray data=finalJson.getJSONArray("data");
Run Code Online (Sandbox Code Playgroud)

因为数据太大,我正在03-21 03:41:49.714: E/AndroidRuntime(666): Caused by: java.lang.OutOfMemoryError指出错误的来源buildr.append(line).append("\n").无论如何,我可以处理大型数据集而不会出现内存分配问题吗?

lou*_*uie 5

JSON很大!

您肯定需要使用流式JSON解析器.Android有两个版本:GSON和Jackson.

GSON Streaming的解释如下:https://sites.google.com/site/gson/streaming

我喜欢GSON如何解释你遇到的问题:

大多数应用程序应仅使用对象模型API.JSON流媒体在以下几种情况下很有用:

当不可能或不希望将整个对象模型加载到内存中时.这在内存有限的移动平台上最为相关.

Jackson Streaming记录于:http://wiki.fasterxml.com/JacksonInFiveMinutes#Streaming_API_Example