改造 - 用基类解析通用api响应

时间:2018-02-05 14:01:32

标签: android retrofit2 gson

我正在使用retrofit for rest api调用我的android应用程序开发。由于我的所有api响应都有"info"(请注意,所有API都具有相同的密钥名称)和"data"请注意,不同的api具有不同的密钥名称)参数,我使用过api响应的基类。以下是API

的示例回复

回复1

{
"info":{
        "statusCode":200,
        "message":"OK"
       },
"data":{
        "userId":2,
        "userName":"riyas"
       }
 }

回复2

{
"info":{
        "statusCode":200,
        "message":"OK"
       },
"data":{
        "vegId":2,
        "vegName":"Potatoa"
       }
 }

我创建了一个名为 CloudBaseResponse 的基类,并且能够以 response.info 获取数据。但我不知道要解析**data**。请建议我使用改造

来处理
public class CloudBaseResponse {

   public BaseResponse response;

    public BaseResponse  getResponse() {
        return response;
    }

    public void setResponse(BaseResponse response) {
        this.response = response;
    }

    public class BaseResponse {
        public Info info;

    }

    public class Info{
        public String status;
        public String message;
    }

}

2 个答案:

答案 0 :(得分:8)

您可以使用Generics来映射您的API响应。

public class CloudBaseResponse<T> {
    @SerializedName("info")   
    private Info info;    

    @SerializedName("data")
    private T data;

    // Getters Setters..
}  

public class Info {
    private String status;
    private String message;

    // Getters Setters.. 
}

例如,您有一个Vegetable类。

public class Vegetable {
    private int vegetableId;
    private String vegetableName;

    // Getters Setters..
}

稍后您可以使用Retrofit,例如以下代码:

Call<CloudBaseResponse<Vegetable>> getVegetables();

答案 1 :(得分:2)

创建一个名为BaseModel的类,并将其扩展到响应模型(数据)

public class BaseModel {
    Info info;

    public getInfo(){ return info;}
    public setInfo(Info info){ this.info = info; }

    public BaseModel() {
    }
}

public class Info{
    int statusCode;
    String message;

    public int getStatusCode() {
        return statusCode;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }
}

你的数据类就像:

class Response extends BaseModel {
    public Data data;
}

class Data{
    public int vegId;
    public String vegName;
}

最后,在Retrofit中,您对Response

进行了解析