Eu estou tentando analisar alguns JSON no meu Androidaplicação. Um JSONObject é retornado e nesse JSONObject existe um JSONArray. Mas meu problema é: de alguma forma o Android não reconhece o array no JSONObject.
Este é o meu código 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();
Meu JSON está OK, porque isso Log.v("json: ", json.getString("tag"));
apenas funciona bem. este é o meu 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"
}
]
}
E finalmente meu LogCat:
04-05 22:23:39.082: D/Http Response:(31845): org.apache.http.client.methods.HttpPost@65684f78
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)
Minha pergunta é: o que estou fazendo errado? Desde já, obrigado!
Respostas:
0 para resposta № 1Isso pode acontecer na função getter de JSONObject
. Isso significa que você está tentando recuperar o valor do JSONObject
usando um id que na verdade não existe. Antes de recuperar qualquer valor, verifique se ele existe no JSONObject
fazendo uso de has(name)
. Você pode verifique isso para mais detalhes.
Espero que isto ajude.