Autore Topic: errore nel leggere dati json  (Letto 919 volte)

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
errore nel leggere dati json
« il: 12 Marzo 2013, 19:44:53 CET »
0
ciao a tutti,
ho provato a cercare l'argomento ma non sono riuscito a trovare una soluzione nello specifico.

ho un programma che recupera da un DB mysql trmite metodo post  una string Json.

una volta recuperati i dati uso questo script.
Codice (Java): [Seleziona]
JSONObject jo = new JSONObject(result);
//carica le classi
if(jo.getString("classi")!=null)
{
      Log.w("MyApp","INSERIMENTO CLASSI");  
      JSONArray classiArray = new JSONArray(jo.getString("classi"));
      for (int i = 0; i < classiArray.length(); i++) {
            JSONObject row = classiArray.getJSONObject(i);
            Log.w("MyApp",ProgettoID.toString()+" "+row.getString("codice")+" "+row.getString("descri"));
            mDbHelper.creaClasse(ProgettoID.toString(), row.getString("codice"), row.getString("descri"));
       }
}
questa è una versione ridotta, i campi sono molto di più di 2.
il problema è quando questi dati non sono presenti.

in pratica, quando interrogo php mi ritorna una stringa (print json_encode($array);)
il prolema è quando recupero le informazioni su android.

ipotizzando
Codice (Java): [Seleziona]
 
mDbHelper.creaClasseLunga(ProgettoID.toString(), row.getString("codice"), row.getString("descri"),  row.getString("descri2"), row.getString("studenti") , row.getString("ore")    );
il problema è che se       row.getString("ore")           non è presente nell'array json,  ritorna un errore e non inserisce nulla.

se invece sostituisco    row.getString("ore")  con ""
funziona correttamente.

volevo quindi inserire una forma di controllo del tipo php
Codice (Java): [Seleziona]
String ore =row.getString("ore") ;
if(ore==null){ore="";}
ovviamente questo pseudo codice non va. il fatto stesso di richiamare con row.getString("ore")  genera l'errore.

devo aggiungere un try{} per ogni valore?

grazie e scusate per la scrittura un po confusa.

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:errore nel leggere dati json
« Risposta #1 il: 13 Marzo 2013, 08:55:51 CET »
0

Codice (Java): [Seleziona]
String ore =row.getString("ore") ;
if(ore==null){ore="";}
ovviamente questo pseudo codice non va. il fatto stesso di richiamare con row.getString("ore")  genera l'errore.

In che senso non va? Mi sembra giusto...

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:errore nel leggere dati json
« Risposta #2 il: 13 Marzo 2013, 11:47:43 CET »
0
ciao,
anche io lo pensavo.

il problema penso sia inerente al fatto che non riesco a comprendere il concetto di oggetto completamente.

se fossimo in php, nel caso in cui richiamo un array inesistente ( $array["ore"]) , il programma non si ferma e continua. semplicemente restitusce un dato vuoto.

in questo caso row è un oggetto e se non ho capito male, viene cercato il dato all'interno la cui stringa è "ore"
solo che "ore" non esiste.
ne ho concluso che se la mia strina json è del tipo

{"classi":[{"id":"1","progetto":"1","codice":"a","descri":"1b"},{"id":"2","progetto":"1","codice":"b","descri":"1ab"}]}

dove non esiste il campo "ore", android va in errore e non inserisce il dato. non stampa il log  ne prosegue da quel punto in poi.. è come se richiamasse un exit();

quindi mi chiedevo se era possibile sapere a prescindere se tale campo è presente o meno.

e cambiare la cosa in tipo
Codice (Java): [Seleziona]
try{
       String ore =row.getString("ore") ;
}
catch(Exception e){
        String ore ="";
}
non so se in questo modo posso evitare l'errore. inoltre i campi che potrebbero essere presenti come no sono 53.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:errore nel leggere dati json
« Risposta #3 il: 13 Marzo 2013, 11:52:06 CET »
0
Puoi usare il metodo opString:

Codice (Java): [Seleziona]
String ore = row.optString("ore","");
http://developer.android.com/reference/org/json/JSONObject.html#optString(java.lang.String, java.lang.String)

Conviene sempre leggere sempre la documentazione per capire se c'è un metodo che magari fa al caso nostro ;)
« Ultima modifica: 13 Marzo 2013, 11:56:23 CET da Ricky` »

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:errore nel leggere dati json
« Risposta #4 il: 13 Marzo 2013, 12:20:44 CET »
0
Ciao e grazie per la dritta.
purtropo la guida è cosi vasta che ho qualche difficoltà a memorizzare tutto, senza contare che a volte se non sai che una cosa esiste è difficile da ricercare. :-P

comunque grazie a te ho risolto questo problema e anche un'altro usando public boolean has(String name)

devo solo sistemare qualche punto lato layout e poi sono a posto ;)

grazie.