怎么了?
我有一个JSON,它有一个布尔值作为项目1和一个“Socio”对象数组作为项目2,我必须阅读流式传输,因为它非常大。
我的+ 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但是它正在使用具有名称的对象,所以我无法使用它来获取数组。
提前致谢。 问候。 拉斐尔。
答案 0 :(得分:1)
您的流媒体代码错误,第一个skipValue实际上会让您跳过整个文档。
试试这个:
JsonReader reader = new JsonReader(new InputStreamReader(source,"UTF-8"));
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String strName = jsonReader.nextName();
if (strName.equals("response")) {
reader.skipValue();
}
else if (strName.equals("result")) {
jsonReader.beginArray();
while (reader.hasNext()) {
soc = gson.fromJson(reader, Socio.class);
lista.add(soc);
}
jsonReader.endArray();
}
}
jsonReader.endObject();
...