错误: E / AndroidRuntime(2711):java.lang.IllegalStateException:预期名称但是为STRING
在assests下的文件(test)的内容:
[
{
"title": "baidu",
"url": "http://www.baidu.com"
}
]
解析代码:
new Thread(){
@Override
public void run()
{
try
{
InputStream is = MainActivity.this.getResources()
.getAssets().open("test");
InputStreamReader in = new InputStreamReader(is);
JsonReader reader = new JsonReader(in);
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
while(reader.hasNext())
{
System.out.println(reader.nextName());
}
reader.endObject();
}
reader.endArray();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}.start();
答案 0 :(得分:0)
[ // json array node
{ // json object node
"title": "baidu", // json string
"url": "http://www.baidu.com"
}
]
尝试以下
try
{
InputStream is = MainActivity.this.getResources()
.getAssets().open("test");
InputStreamReader in = new InputStreamReader(is);
reader = new JsonReader(in);
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("title")) {
String title = reader.nextString();
Log.i("..........",title);
} else if (name.equals("url")) {
String url = reader.nextString();
Log.i("..........",url);
} else {
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray(); // end array
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try {
reader.close(); // remember to close the reader
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
日志
11-10 06:52:31.501: I/..........(2201): baidu
11-10 06:52:31.518: I/..........(2201): http://www.baidu.com
同时检查此
http://developer.android.com/reference/android/util/JsonReader.html
答案 1 :(得分:0)
在这部分:
while(reader.hasNext())
{
System.out.println(reader.nextName());
}
您只需使用名称,但不使用属性的值。因此,在第二次迭代中,您将获得值标记(字符串)并尝试将其作为名称读取。