0

错误:E/AndroidRuntime(2711): java.lang.IllegalStateException: 应为名称,但为 STRING

评估下的文件(测试)的内容:

[
  {
    "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();
4

2 回答 2

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

于 2013-11-10T05:50:44.583 回答
0

在这部分:

while(reader.hasNext())
{
    System.out.println(reader.nextName());
}

您只使用名称,而不使用属性的值。因此,在第二次迭代中,您将获得值标记(字符串)并尝试将其作为名称读取。

于 2013-11-10T06:10:04.973 回答