2013-11-10 5 views
0

오류 : E/AndroidRuntime (2711) : java.lang.IllegalStateException : assests에서 이름을 예상하지만 STRING안드로이드 : JSON parseing 오류

파일 (시험)의 내용이었다

[ 
    { 
    "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

당신은'reader.beginArray();'하고 있지만 json에는 배열이 없습니다. 둘째, 전체 logcat 출력을 게시하십시오. –

+0

@RahulGupta'['는 json 배열 노드를 나타냅니다. 그래서 op는 json 배열을 가지고 있습니다 – Raghunandan

답변

0
이 부분에서

을 확인 재산. 두 번째 반복에서는 따라서 값 토큰 (문자열)을 가져 와서 이름으로 읽으려고합니다.

0
[ // json array node 
    { // json object node 
    "title": "baidu", // json string 
    "url": "http://www.baidu.com" 
    } 
] 

는 아래

시도

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

당신은 이름 만 소비가 아니라 값 :

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

+0

귀하의 세부 답변을 주셔서 감사합니다! – zcloud