我必须重构应用程序的某些区域才能使用 Gson 中的流 API,但很快我就遇到了一个奇怪的问题,我不知道如何解决。我的类中的以下构造函数接收一个 JsonReader 并应该循环访问该对象的属性。 LogCat 显示第一个属性输出的名称,然后显示异常“预期名称但为 BOOLEAN”。我只使用 reader.nextName() 询问名称。给出了什么?
JSON 对象:
{
"IsActive":true,
"LocationName":"Denver",
...
}
类构造函数:
public AppLocation(JsonReader reader){
try {
reader.beginObject();
while(reader.hasNext()){
final String pName = reader.nextName();
final boolean isNull = reader.peek() == JsonToken.NULL;
if(!isNull){
Log.d("MENET", pName);
}else{
reader.skipValue();
}
}
reader.endObject();
} catch (IOException e) {
Log.e("MENET", e.getMessage());
}
}
最佳答案
使用此阅读器的流式传输方法适用于“元素”,即名称或值。
因此,在第一个“元素”(即名称)之后,您将获得一个值。
除非您的代码正在调用 reader.nextName()
,这就是为什么它显示“需要一个名称...”
Android 网站上的 JsonReader
下有一个很好的示例:
关于java - GSON JsonReader 给我值而不是名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306371/