使用Retrofit获取嵌套的JSON数据

时间:2015-09-15 04:37:45

标签: android json android-fragments android-activity retrofit

我正在使用像这样的改造:

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 Retrofit回调中访问用户的success

这是我的模特。的的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;
    }
}

2 个答案:

答案 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;


}

答案 1 :(得分:0)

为什么@SerializedName低于变量? “id”的名称也与json匹配,因此您不需要@SerializedName注释