【发布时间】:2014-01-03 19:47:33
【问题描述】:
怎么了?
我有一个 JSON,其中第 1 项是布尔值,第 2 项是“Socio”对象数组,我必须使用流式传输读取,因为它非常大。
我的 +5.0MB JSON 是这样的:{"response":true,"result":[{SOCIO OBJECT}, {SOCIO OBJECT}...]
我的第一个代码(在 API 8、9 上抛出 OutOfMemoryError)是:
InputStream source = f.retrieveStream(params[0]);
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
Respuesta response = gson.fromJson(reader, Respuesta.class);
Socio[] socios = response.getSocio();
我用于流式传输的新代码是:
InputStream source = f.retrieveStream(params[0]);
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(source,"UTF-8"));
reader.skipValue(); // Because I have to skip the response... Am i doing this right??
lista = new ArrayList<Socio>();
Socio soc;
reader.beginArray();
while (reader.hasNext()) {
soc = gson.fromJson(reader, Socio.class);
lista.add(soc);
}
reader.endArray();
reader.close();
但是当它快要加载时它会抛出这个异常:
java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 4716089 列为 END_DOCUMENT
代码所在行:reader.beginArray();
This is 我的流式阅读的基础。
我已经阅读了很多关于 GSON 的解析,但我找不到任何用于解析 JSON 文件中的特定数组的内容。我只知道用 Android Json 库来做,但我需要使用 GSON。我还在 Google 上浏览了 this search 的前 10 页,但没有找到明确的回应,我理解 this SO question 但它适用于有名称的对象,因此我无法将其用于数组。
提前致谢。 问候。 拉斐尔。
【问题讨论】:
-
我一开始打了个招呼,但是自动删除了它...:O
标签: android json parsing streaming gson