2013-06-18 51 views
0

我使用本教程:http://www.androidhive.info/2012/10/android-multilevel-listview-tutorial/單JSON獲取多個記錄

在這裏,他創造了3個不同的JSONs,

首先,獲取相冊

的列表,以獲取歌曲下的專輯列表

第三,顯示單曲信息

,但我在這裏需要一個小的變化,而不是3個不同的,不同的JSONs,我想使用單JSON兩個相冊&歌曲,我創建了我的演示JSON以及,我能拿到專輯的列表,但是歌曲的沒有得到名單,我的JSON這個樣子,我使用相同的代碼,因爲他已經爲客戶端寫的:

my.json:

[ 
{ 
    "id": 1, 
    "name": "127 Hours", 
    "album": "127 Hours", 
    "songs": [ 
     { 
      "id": 1, 
      "name": "Never Hear Surf Music Again", 
      "duration": "5:52" 
     }, 
     { 
      "id": 2, 
      "name": "The Canyon", 
      "duration": "3:01" 
     } 
    ] 
} 
] 

logcat的:

06-18 06:36:56.318: D/dalvikvm(793): GC_CONCURRENT freed 143K, 7% free 3745K/4012K, paused 6ms+127ms, total 243ms 
06-18 06:36:56.399: I/Choreographer(793): Skipped 37 frames! The application may be doing too much work on its main thread. 
06-18 06:36:56.689: I/Choreographer(793): Skipped 66 frames! The application may be doing too much work on its main thread. 
06-18 06:36:57.508: D/Track List JSON:(793): [ 
06-18 06:36:57.508: D/Track List JSON:(793): { 
06-18 06:36:57.508: D/Track List JSON:(793): "id":1, 
06-18 06:36:57.508: D/Track List JSON:(793): "name":"127 Hours", 
06-18 06:36:57.508: D/Track List JSON:(793): "album":"127 Hours", 
06-18 06:36:57.508: D/Track List JSON:(793): "songs":[ 
06-18 06:36:57.508: D/Track List JSON:(793): { 
06-18 06:36:57.508: D/Track List JSON:(793): "id":1, 
06-18 06:36:57.508: D/Track List JSON:(793): "name":"Never Hear Surf Music Again", 
06-18 06:36:57.508: D/Track List JSON:(793): "duration":"5:52" 
06-18 06:36:57.508: D/Track List JSON:(793): }, 
06-18 06:36:57.508: D/Track List JSON:(793): { 
06-18 06:36:57.508: D/Track List JSON:(793): "id":2, 
06-18 06:36:57.508: D/Track List JSON:(793): "name":"The Canyon", 
06-18 06:36:57.508: D/Track List JSON:(793): "duration":"3:01" 
06-18 06:36:57.508: D/Track List JSON:(793): } 
06-18 06:36:57.508: D/Track List JSON:(793): ] 
06-18 06:36:57.508: D/Track List JSON:(793): } 
06-18 06:36:57.508: D/Track List JSON:(793): ] 
06-18 06:36:57.668: W/System.err(793): org.json.JSONException: Value [{"id":1,"songs":[{"id":1,"duration":"5:52","name":"Never Hear Surf Music Again"},{"id":2,"duration":"3:01","name":"The Canyon"}],"album":"127 Hours","name":"127 Hours"}] of type org.json.JSONArray cannot be converted to JSONObject 
06-18 06:36:57.668: W/System.err(793): at org.json.JSON.typeMismatch(JSON.java:111) 
06-18 06:36:57.668: W/System.err(793): at org.json.JSONObject.<init>(JSONObject.java:158) 
06-18 06:36:57.788: W/System.err(793): at org.json.JSONObject.<init>(JSONObject.java:171) 
06-18 06:36:57.888: W/System.err(793): at com.example.androidhive.TrackListActivity$LoadTracks.doInBackground(TrackListActivity.java:155) 
06-18 06:36:57.898: W/System.err(793): at com.example.androidhive.TrackListActivity$LoadTracks.doInBackground(TrackListActivity.java:1) 
06-18 06:36:57.898: W/System.err(793): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
06-18 06:36:57.898: W/System.err(793): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
06-18 06:36:57.898: W/System.err(793): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
06-18 06:36:57.898: W/System.err(793): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
06-18 06:36:57.909: W/System.err(793): at java.lang.Thread.run(Thread.java:856) 

注:我能夠獲取歌曲的名單,但每當我做任何專輯的點擊沒有得到歌曲

+0

你可以在網上找到許多JSON的瀏覽器的觀衆,我使用JSON文件時使用他們製造了很多: HTTP:// jsonviewer。 stack.hu/ –

+0

這是什麼問題?郵政編碼和logcat! – Enrichman

+0

看來你的json是有效的 - 在http://jsonlint.com/檢查你可以發佈你的代碼? –

回答

0

由於您的JSON數據與方括號裝置開始它是一個jsonarray,你需要解析它開始與jsonarray。

此代碼可以幫助你..

JSONArray array = new JSONArray("Your_json_string"); 
for(int i=0;i<array.length();i++){ 
    System.out.println("id:"+array.getJSONObject(i).getString("id")); 
    System.out.println("name:"+array.getJSONObject(i).getString("name")); 
    System.out.println("album:"+array.getJSONObject(i).getString("album")); 
    JSONArray innerArray = getJSONObject(i)..getJSONArray("songs"); 
     for(int k=0;k<innerArray.length();k++){ 
     JsonObject innerObj = innerArray.getJSONObject(k); 
     System.out.println("id:"+innerObj.getString("id")); 
     System.out.println("Name:"+innerObj.getString("name")); 
      System.out.println("duration:"+innerObj.getString("duration"));   

     } 
    } 
+0

他要求解析json數據嗎? – Raghunandan

0

你試圖將一個JSON數組轉換成JSON對象,這就是問題所在。

org.json.JSONException: Value [.......] of type org.json.JSONArray cannot be converted to JSONObject 

這裏:

JSONObject jObj = new JSONObject(json); 

你的JSON字符串實際上是一個數組,而不是一個對象,因爲它與[]開始。

如果你想處理一個對象改變它,並使它開始{},你完成了(或將其轉換爲JSONArray並獲得firts值)!


編輯:

這應該工作:

{ 
    "id": 1, 
    "name": "127 Hours", 
    "album": "127 Hours", 
    "songs": [ 
     { 
      "id": 1, 
      "name": "Never Hear Surf Music Again", 
      "duration": "5:52" 
     }, 
     { 
      "id": 2, 
      "name": "The Canyon", 
      "duration": "3:01" 
     } 
    ] 
} 
+0

請告訴我我的JSON應該是什麼樣子,因爲我不想在我的代碼 –

+0

中修改編輯。嘗試這個! – Enrichman

+0

嘗試甚至沒有得到類別列表 –