2010-11-24 4 views
1

У меня есть следующий ответ JSON из URL:JSON десериализации с помощью 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 
       ) 

     ) 

) 

А вот как я делаю разбор:

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

Когда я запускаю код, я получаю это error: ERROR/AndroidRuntime (823): java.lang.RuntimeException: конструктор no-args для класса com.project.driver.Driver $ Post не существует. Зарегистрируйте InstanceCreator с Gson для этого типа, чтобы исправить эту проблему.

У меня возникли проблемы с определением подходящего Driver.java для синтаксического анализа. Когда я опускаю поле «last5comments», все работает отлично, это просто немного «last5comments» У меня возникли проблемы с ...

Вот 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=""; 
    } 
} 

Любая помощь с определением подходящий Driver.java очень ценится.

Спасибо заранее,

ответ

7

мне удалось решить эту проблему, глядя на:

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

(раздел "Вложенные классы (включая внутренние классы)")

Все, что мне нужно было сделать, это сделать объект Post статическим.

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

Исправить. Или сделать его классом верхнего уровня, переместив его в отдельный файл (без статичности в этом случае). – 2010-11-24 13:24:30