Autore Topic: Problema gestione JSONArray  (Letto 473 volte)

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Problema gestione JSONArray
« il: 07 Marzo 2014, 11:39:38 CET »
0
Salve ragazzi ho dei problemim con la gestione di un JSON ed in particolare JSONArray.
Questo è il mio "result" diciamo da sfogliare:
Codice (Java): [Seleziona]
{"query":"WHERE tipo = 'casa' AND 1 = 1","response":[{"id":"1","titolo":"Libro","vano":"1"},{"id":"2","titolo":"Letteratura","vano":"5"},{"id":"3","titolo":"Storia","vano":"5"}]Questo è il codice che ho fatto per sfogliarlo e metterlo in un arrayList:
Codice (Java): [Seleziona]
JSONArray json=new JSONArray(result);
                                        for(int i=0;i<json.length();i++){
                                                String current=json.getString(i);
                                                JSONObject json_data = json.getJSONObject(i);
                                                Dati datiObject=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("vano"));
                                                lista.add(dati);
                                        }
Mentre questo è il mio logcat:
Codice (Java): [Seleziona]
03-07 11:35:04.966: W/System.err(5076): org.json.JSONException: Value {"response":[{"id":"1","titolo":"Libro","vano":"1"},{"id":"2","titolo":"Letteratura","vano":"5"},{"id":"3","titolo":"Storia","vano":"5"}]
03-07 11:35:04.966: W/System.err(5076):         at org.json.JSON.typeMismatch(JSON.java:111)
03-07 11:35:04.966: W/System.err(5076):         at org.json.JSONArray.<init>(JSONArray.java:96)
03-07 11:35:04.976: W/System.err(5076):         at org.json.JSONArray.<init>(JSONArray.java:108)
03-07 11:35:04.976: W/System.err(5076):         at com.programming.Lista$AsyncTaskLista.doInBackground(Lista.java:127)
03-07 11:35:04.976: W/System.err(5076):         at com.programming.Lista$AsyncTaskLista.doInBackground(Lista.java:1)
03-07 11:35:04.976: W/System.err(5076):         at android.os.AsyncTask$2.call(AsyncTask.java)
03-07 11:35:04.976: W/System.err(5076):         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-07 11:35:04.986: W/System.err(5076):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java)
03-07 11:35:04.986: W/System.err(5076):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-07 11:35:04.996: W/System.err(5076):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-07 11:35:04.996: W/System.err(5076):         at java.lang.Thread.run(Thread.java:864)
Da premettere che l'eccezione viene lanciata su questa istruzione:
Codice (Java): [Seleziona]
JSONArray json=new JSONArray(result);Grazie a tutti per la collaborazione....

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema gestione JSONArray
« Risposta #1 il: 07 Marzo 2014, 14:23:36 CET »
+2
Non funziona per 2 motivi.

Primo la stringa non è corretta. Manca il } al termine.

Secondo non un è JSONArray, ma un JSONObject che contiene un array

Prova così:
Codice: [Seleziona]
    JSONObject resultAsJson = new JSONObject( result );
    JSONArray responseArray = resultAsJson.getJSONArray("response");
    for( int i=0; i < responseArray.length(); i++ )
    {
        JSONObject json_data = responseArray.getJSONObject(i);
        Dati datiObject=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("vano"));
        lista.add(dati);
    }
   

Cmq puoi usare le versioni opt invece di get (optJSONObject, optString) che ritornano null se il campo non c'è, per essere più robusto alla lettura.

Ciao.

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Problema gestione JSONArray
« Risposta #2 il: 09 Marzo 2014, 12:26:21 CET »
0
Non funziona per 2 motivi.

Primo la stringa non è corretta. Manca il } al termine.

Secondo non un è JSONArray, ma un JSONObject che contiene un array

Prova così:
Codice: [Seleziona]
    JSONObject resultAsJson = new JSONObject( result );
    JSONArray responseArray = resultAsJson.getJSONArray("response");
    for( int i=0; i < responseArray.length(); i++ )
    {
        JSONObject json_data = responseArray.getJSONObject(i);
        Dati datiObject=new Dati(json_data.getString("id"),json_data.getString("titolo"),json_data.getString("vano"));
        lista.add(dati);
    }
   

Cmq puoi usare le versioni opt invece di get (optJSONObject, optString) che ritornano null se il campo non c'è, per essere più robusto alla lettura.

Ciao.

Alla grandissima, problema risolto. In futuro incomincierò ad utilizzare anche le versioni opt invece dei get....Grazie mille per l'aiuto ;)