2015-09-15 2 views
0

Я использую Дооснащение так:Получить вложенные данные в формате JSON с Модернизированный

final RestAdapter restAdapter = new RestAdapter.Builder() 
     .setEndpoint(URL) 
     .build(); 

final ApiEndpointInterface apiService = restAdapter.create(ApiEndpointInterface.class); 

apiService.getData(userId, new Callback<UserData>() { 

    @Override 
    public void success(UserData userData, Response response) { 

     // get data 

    } 

    @Override 
    public void failure(RetrofitError retrofitError) { 
     retrofitError.printStackTrace(); 
    } 
}); 

JSON он запрашивает в таком виде:

{ 
    "success":true, 
    "data":[ 
     { 
      "id":"11", 
      "name":"John" 
     } 
    ] 
} 

Как я могу получить доступ к name пользователя в success callback от модернизации?

Вот мои модели. UserData:

public class UserData { 

    @Expose 
    private Boolean success; 
    @Expose 
    private List<User> data = new ArrayList<User>(); 

    /** 
    * 
    * @return 
    * The success 
    */ 
    public Boolean getSuccess() { 
     return success; 
    } 

    /** 
    * 
    * @param success 
    * The success 
    */ 
    public void setSuccess(Boolean success) { 
     this.success = success; 
    } 

    /** 
    * 
    * @return 
    * The data 
    */ 
    public List<User> getData() { 
     return data; 
    } 

    /** 
    * 
    * @param data 
    * The data 
    */ 
    public void setData(List<User> data) { 
     this.data = data; 
    } 

} 

Пользователь:

public class User { 

    @Expose 
    private String id; 
    @SerializedName("user_id") 
    @Expose 
    private String name; 
    @SerializedName("name") 

    /** 
    * 
    * @return 
    * The id 
    */ 
    public String getId() { 
     return id; 
    } 

    /** 
    * 
    * @param id 
    * The id 
    */ 
    public void setId(String id) { 
     this.id = id; 
    } 

    /** 
    * 
    * @return 
    * The message 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * 
    * @param message 
    * The message 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 
} 
+0

Это должно быть похоже на этот список user = userData.getData(). И затем вы можете выполнить итерацию и fecth имя пользователя. –

+0

'getData()' является 'List'. Разве это не должно быть? – user5314557

+0

Проверьте редактирование, Извините, я не заметил Список –

ответ

0

Используйте GsonConveter десериализовать вложенного класса

 RestAdapter restAdapter = new RestAdapter.Builder() 
       .setEndpoint(URL). setConverter(new GsonConverter(new GsonBuilder() 
       .registerTypeAdapter(UserData.class, new ExplorerDeserializerJson()) 
       .create())) 
       .build(); 


public class ExplorerDeserializerJson implements sonDeserializer<UserData> {    


    @Override  
    public UserData deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) 
     throws JsonParseException { 
    UserData userdata= new UserData(); 

     JsonArray jsonArray = je.getAsJsonArray(); 
     Log.d(TAG,"Trying"); 
     Gson gson = new Gson(); 

    for(JsonElement element : jsonArray){ 
     JsonObject jsonObject = element.getAsJsonObject(); 

     User userid= gson.fromJson(jsonObject.get("id"),  User.class); 
     userdata.addgallery(userid); 

    } 
    return userdata; 


} 
0

Почему вы должны @SerializedName ниже переменной? Также имя «id» соответствует json, поэтому вам не нужна аннотация @SerializedName

Смежные вопросы