2010-11-24 16 views
1

J'ai la réponse JSON suivante à partir d'une url:JSON désérialisation utilisant GSON

stdClass Object 
(
    [uname] => Eamorr 
    [phoneNumber] => 082732938293 
    [fname] => Steve 
    [lname] => Hearst 
    [sex] => M 
    [roofSignNumber] => 230948 
    [vehicleReg] => 07D2892 
    [vehicleMake] => Toyota 
    [vehicleModel] => Avensis 
    [vehicleNumPassengers] => 4 
    [profilePic] => -1 
    [online] => 1 
    [status] => 
    [picList] => Array 
     (
     ) 

    [lat] => 
    [lng] => 
    [reputation] => 0.63 
    [numPagesComments] => 1 
    [last5comments] => Array 
     (
      [0] => stdClass Object 
       (
        [comment] => hello5 
        [fromUname] => Eamorr 
        [profilePic] => -1 
        [time] => 1290254763 
        [id] => 23628mr28018onm647z2 
       ) 

     ) 

) 

Et voici comment je fais l'analyse syntaxique:

     Gson json=new Gson(); 
         try{ 
          Driver driver=json.fromJson(response,Driver.class); 
          Log.i("json",driver.profilePic); 
         }catch(JsonParseException e){ 
          Log.i("error","JsonParseException"); 
         } 

Quand je lance le code, je reçois ce erreur: ERROR/AndroidRuntime (823): java.lang.RuntimeException: constructeur No-args pour la classe com.project.driver.Driver $ Post n'existe pas. Enregistrez un InstanceCreator avec Gson pour ce type pour résoudre ce problème.

J'ai des problèmes avec la définition d'un Driver.java approprié pour l'analyse. Quand j'omettez le champ 'last5comments de, tout fonctionne bien, il est juste le bit « last5comments » Je vais avoir des problèmes avec ...

Voici Driver.java:

public class Driver { 
    public String uname=""; 
    public String phoneNumber=""; 
    public String fname=""; 
    public String lname=""; 
    public String sex=""; 
    public String roofSignNumber=""; 
    public String vehicleReg=""; 
    public String vehicleMake=""; 
    public String vehicleModel=""; 
    public String vehicleNumPassengers=""; 
    public String profilePic=""; 
    public String online=""; 
    public String status=""; 
    public String[] picList; 
    public String lat=""; 
    public String lng=""; 
    public String reputation=""; 
    public String numPagesComments=""; 

    //having problems below this line 
    public Post[] last5comments; 

    public class Post{ 
     public String comment=""; 
     public String fromUname=""; 
     public String profilePic=""; 
     public String time=""; 
     public String id=""; 
    } 
} 

Toute aide à définir un Driver.java approprié est très apprécié.

Merci à l'avance,

Répondre

7

J'ai réussi à résoudre ce problème en regardant:

http://sites.google.com/site/gson/gson-user-guide#TOC-Nested-Classes-including-Inner-Clas

(section sur les "classes emboîtées (y compris les classes internes)")

Tout ce que je devais faire était de rendre l'objet Post statique.

public static class Post{ 
     public String comment=""; 
     public String fromUname=""; 
     public String profilePic=""; 
     public String time=""; 
     public String id=""; 
    } 
+3

Correct. Ou en faire une classe de premier niveau en la déplaçant dans un fichier séparé (sans statique dans ce cas). –