Autore Topic: Lettura JSON: exception nel mio progetto  (Letto 670 volte)

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Lettura JSON: exception nel mio progetto
« il: 19 Marzo 2011, 22:18:48 CET »
0
Come da tutorial con lettura dei dati da JSON tramite Gson di Google e interfacciamento ad un sito web:

il risultato che ottengo è un IllegalArgumentException e non riesco a capirne il motivo, vi posto le mie classi Java

Classe Generale Json
Codice (Java): [Seleziona]
package android.domotic;

import java.util.ArrayList;

public class ParsingJson {
        public String ip;
        public ArrayList<Elemento> devices;
       
        ParsingJson(){
                ip = " ";
                devices = new ArrayList<Elemento>();
        }
        private void impostaIp(String i){
                ip = i;
        }
         public String toString(){
                return ip;
        }
       
}

Seconda classe allegata a questa per gestire un tipo Elemento che fondamentalmente è costituito da 3 stringhe:

Codice (Java): [Seleziona]
package android.domotic;

public class Elemento{

        String type;
        String name;
        String out;
       
        Elemento(){
                type = "";
                name = "";
                out = "";
        }
        Elemento(String t, String n, String p){
                type = t;
                name = n;
                out = p;
        }
}

Da qui invece chiamo le istruzioni necessarie per il parsing:

Codice (Java): [Seleziona]
try {
                                connect =       (HttpURLConnection) (new URL(cf)).openConnection();
                                publishProgress("connesso");
                                Reader read = new InputStreamReader(connect.getInputStream());
                                publishProgress("creazione reader ");
                                String s = "";
                                int c;
                               
                                while((c = read.read())!= (-1)){

                                        s+=""+(char)c;
                                }
                                publishProgress("JSON: "+s);
                               
                                Gson gson = new Gson();
                                publishProgress("avvio json");
                                ParsingJson dati = new ParsingJson();
                                publishProgress("creazione parsing dati");
                                dati = gson.fromJson(s, ParsingJson.class);
                                publishProgress("completamento parsing dati");
                                publishProgress("toString "+dati.toString());

                        } catch (MalformedURLException e) {
                                publishProgress("1");
                                e.printStackTrace();
                        } catch (IOException e) {
                                publishProgress("2\n"+e);
                        }
                        catch (Exception e) {
                Log.e("JSON_Parser",e.toString());
                        }

Non riesco a capire perchè mi dia l'eccezione visto che il tipo di dati che devo recuperare mi sembra quello giusto:
sto facendo delle prove su questa stringa (e il tipo Elemento mi pare che sia costituito da 3 stringhe):

{"ip" : "192.168.10.15", "devices" : [{ "type" : "gate", "name" : "cancellino ingresso", "out" : "5"}, {"type" : "door", "name" : "porta ingresso", "out" : "4"}, {"type" : "light", "name" : "luce soggiorno", "out" : "6"}, {"type" : "light", "name" : "luce cucina", "out" : "7"}, {"type" : "temperature", "name" : "camera da letto", "out" : "0"}, {"type" : "temperature", "name" : "camera bimbi", "out" : "9"}, {"type" : "wattmeter", "name" : "consumo energetico casa", "out" : "10"}]}

Se io stampo la stringa s che ho creato una volta reperito il reader dal mio client, me la stampa correttamente... Quindi credo sia proprio un problema di immagazzinamento nella struttura, l'eccezione lanciata da logcat è:

D/dalvikvm(  217): GC freed 4041 objects / 423808 bytes in 74ms

D/dalvikvm(  217): wrong object type: Ljava/util/LinkedList; Ljava/util/ArrayList;

E/JSON_Parser(  217): java.lang.IllegalArgumentException: invalid value for field


Qualcuno può aiutarmi?
« Ultima modifica: 19 Marzo 2011, 22:20:21 CET da UchihaDD »

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:Lettura JSON: exception nel mio progetto
« Risposta #1 il: 20 Marzo 2011, 12:08:30 CET »
0
Sto provando a fare alcune prove e se metto la classe interna Elemento... Così:

Codice (Java): [Seleziona]
package android.domotic;

import java.util.ArrayList;

public class ParsingJson {
        private String ip;
        private ArrayList<Elemento2> devices;
       
        ParsingJson(){
                ip = " ";
                devices = new ArrayList<Elemento2>();
        }
        private void impostaIp(String i){
                ip = i;
        }
         public String toString(){
                return ip;
        }
         class Elemento2{

                         String type;
                         String name;
                         String out;
                       
                        Elemento2(){
                                type = "";
                                name = "";
                                out = "";
                        }
                        Elemento2(String t, String n, String p){
                                type = t;
                                name = n;
                                out = p;
                        }
                }
       
}

Il logcat mi dichiara questo problema

E/JSON_Parser(  326): com.google.gson.JsonParseException: The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@43980700 failed to deserialized json object [{"type":"gate","name":"cancellino ingresso","out":"5"},{"type":"door","name":"porta ingresso","out":"4"},{"type":"light","name":"luce soggiorno","out":"6"},{"type":"light","name":"luce cucina","out":"7"},{"type":"temperature","name":"camera da letto","out":"0"},{"type":"temperature","name":"camera bimbi","out":"9"},{"type":"wattmeter","name":"consumo energetico casa","out":"10"}] given the type com.google.gson.ParameterizedTypeImpl@39b3aef



Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Lettura JSON: exception nel mio progetto
« Risposta #2 il: 21 Marzo 2011, 12:42:45 CET »
0
Non conosco Gson (gli stavo dando un'occhiata), ma guardati Gson User Guide - gson]questo[/url] e questo.
Nel secondo link, parla dei problemi relativi alle deserializzazione delle collection "nestate".
Credo tu debba implementarti una serie di cose per supportarlo.....
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/