2014-04-05 28 views
0

我想解析我的Android應用程序中的一些JSON。一個JSONObject被返回,並且在那個JSONObject中有一個JSONArray。但我的問題是:在某些方面,Android無法識別JSONObject中的數組。JSONExeption:項目沒有值

這是我的Android代碼:

JSONParser jp = new JSONParser(); 
JSONObject json = jp.getList(id,code); 
Log.v("json: ", json.getString("tag")); 
JSONArray jarr = json.getJSONArray("items"); 
for (int i = 0; i < jarr.length(); i++) { 
JSONObject jobj = jarr.getJSONObject(i); 
list.add(jobj.getString("title")); 
} 
adapter.notifyDataSetChanged(); 

我的JSON是OK的,因爲這只是Log.v("json: ", json.getString("tag"));工作正常。 這是我的JSON:

{ 
tag: "getlist", 
status: 1, 
success: "false", 
items: [ 
    { 
    id: "1", 
    owner: "1", 
    datecreated: "2013-10-12 20:05:00", 
    version: "1", 
    title: "asdfjkl", 
    subject: "Wiskunde D" 
    }, 
    { 
    id: "2", 
    owner: "1", 
    datecreated: "2013-10-28 05:32:09", 
    version: "1", 
    title: "asdfjkl", 
    subject: "Nederlands" 
    } 
] 
} 

而且finnaly我的logcat:

04-05 22:23:39.082: D/Http Response:(31845): [email protected] 
04-05 22:23:39.082: V/json:(31845): getlist 
04-05 22:23:39.082: W/System.err(31845): org.json.JSONException: No value for items 
04-05 22:23:39.092: W/System.err(31845): at org.json.JSONObject.get(JSONObject.java:355) 
04-05 22:23:39.092: W/System.err(31845): at org.json.JSONObject.getJSONArray(JSONObject.java:549) 
04-05 22:23:39.092: W/System.err(31845): at nl.wacsite.wacsitebeta.MainFragmentTab$getListAsyncTask.doInBackground(MainFragmentTab.java:62) 
04-05 22:23:39.092: W/System.err(31845): at nl.wacsite.wacsitebeta.MainFragmentTab$getListAsyncTask.doInBackground(MainFragmentTab.java:1) 
04-05 22:23:39.092: W/System.err(31845): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
04-05 22:23:39.092: W/System.err(31845): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
04-05 22:23:39.092: W/System.err(31845): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
04-05 22:23:39.092: W/System.err(31845): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
04-05 22:23:39.092: W/System.err(31845): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
04-05 22:23:39.092: W/System.err(31845): at java.lang.Thread.run(Thread.java:811) 

我的問題是:我究竟做錯了什麼? 在此先感謝!

+0

'jarr.length()'包含空值,你確定該數組中沒有空值?你可以嘗試打印該數組的長度嗎? –

+0

嘗試調試它並在'json'初始化後立即放置一個斷點。你應該能夠查看它的內容。如果它看起來不像項目,那麼你的原始json字符串或解析方法有問題。 – dharms

回答

0

這可能發生在JSONObject的吸氣功能中。這意味着您正嘗試使用實際不存在的ID從JSONObject中檢索值。在檢索任何值之前,請檢查JSONObject中是否存在has(name)。您可以check this瞭解更多詳情。

希望這會有所幫助。