在每次调用 Retrofit 中获取对象

get object inside every call Retrofit

我正在使用 Retrofit 和 RxJava 与 API 集成,每个 api 响应都是这样的:

{"success":true,"message":null,"object":{"bla":"String", "bla1":1}}

唯一改变的是 object,我尝试创建一个 "ResponseBase",每个模型都扩展了它,并创建了一个 "Response",这就是 [=29] =] 将离开 return

public class Response {
    public Boolean success;
    public String message;
    public ResponseBase object;
}

为了得到我想要的对象类型,我只需要输入 .map

//VehicleResponseModel extends ResponseBase

VehicleResponseModel vec = (VehicleResponseModel) response.getObject();

但是出现了这个错误:

ResponseBase cannot be cast to VehicleResponseModel

我没有明确的方法来做到这一点。

我认为问题出在您的继承模型中:

这应该是你的 parent class:

public class Response {
    public Boolean success;
    public String message;
}

这可能是 child classes 之一(代表包含的数据模型):

public class SomeResponse extends Response {

    public InnerModel object;

    public static class InnerModel {
        public String bla;
        public int bla1; 
    }
}

然后当您收到 SomeResponse 的实例时,您可以轻松访问例如someResponse.object.bla1.

为此使用泛型:

public class Response<T> { public Boolean success; public String message; public T object; } 并进行改装 return Response<VehicleResponseModel> 以便您可以从中检索 VehicleResponseModel

如果您打算使用泛型,您应该阅读以下内容:Serializing and Deserializing Generic Types

或者您可以使用上面提到的 Bartek 答案。

public class ResponseBase {
    public Boolean success;
    public String message;
}

public class VehicleResponseModel extends ResponseBase {
    //Your custom vehicle model
}

然后制作你的改装界面returnVehicleResponseModel。