Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Json对象正在发出OutOfMemory异常_Android_Json - Fatal编程技术网

Android Json对象正在发出OutOfMemory异常

Android Json对象正在发出OutOfMemory异常,android,json,Android,Json,我正在使用JSON框架从服务器更新客户端的数据。我有30个Pojo类,并从服务器收到Http响应。我使用该方法创建了Reader的对象 InputStream instream = entity.getContent(); reader = new InputStreamReader(instream, "UNICODE"); 我像这样将其传递到Json对象中 synchronizationResponse = gson.fromJson(reader, SynchronizationResp

我正在使用JSON框架从服务器更新客户端的数据。我有30个Pojo类,并从服务器收到Http响应。我使用该方法创建了Reader的对象

InputStream instream = entity.getContent();
reader = new InputStreamReader(instream, "UNICODE");
我像这样将其传递到Json对象中

synchronizationResponse = gson.fromJson(reader, SynchronizationResponse.class);
但这一行给出了outOfMemory例外。 我将响应写入一个文件,发现文件大小约为12MB。 他们也可以将响应拆分为多个响应,这样我就可以同时读写以避免OOM异常


寻求帮助

很难说,只要我们不知道同步响应类是什么样子的。 无论您的内容是什么,如果您可以将其拆分为多个子部分,请执行此操作并对其进行序列化。

您可以使用解析来解析大量JSON流,而不会耗尽内存。详细信息在文档中,但基本上您创建了一个JsonReader:

JsonReader reader = new JsonReader(new InputStreamReader(instream, "UNICODE"));
并使用reader.nextName来获取键,reader.nextString、reader.nextInt等来获取值,以及reader.beginObject、reader.endObject、reader.beginArray、reader.endArray来标记对象边界,编写递归下降解析器

这允许您以任何粒度一次读取和处理一个片段,而无需将整个结构保存在内存中。如果数据是长期存在的,则可以将其存储在数据库或文件中