在每次调用中获取对象Retrofit

时间:2017-04-06 18:33:14

标签: retrofit rx-java retrofit2 rx-android

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

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

唯一改变的是object,我试图创建一个“ResponseBase”,每个模型都扩展了它,并创建了一个“响应”,这就是api将要返回的内容

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

要获取我想要的对象类型,我只需要投射.map

//VehicleResponseModel extends ResponseBase

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

但是这个错误发生了:

  

无法将ResponseBase强制转换为VehicleResponseModel

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

3 个答案:

答案 0 :(得分:2)

使用泛型:

public class Response<T> { public Boolean success; public String message; public T object; } 并使您的改装返回Response<VehicleResponseModel>,以便您可以从中检索VehicleResponseModel

答案 1 :(得分:1)

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

这应该是你的父类:

If Page.Title = "Home" Then
    Message.Visible = True
Else
    Message.Visible = False
End If

这可能是其中一个子类(代表包含的数据模型):

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

然后,当您收到public class SomeResponse extends Response { public InnerModel object; public static class InnerModel { public String bla; public int bla1; } } 的实例时,您可以轻松访问,例如SomeResponse

答案 2 :(得分:0)

如果您打算使用泛型,请阅读:Serializing and Deserializing Generic Types

或者你可以选择上面提到的Bartek答案。

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

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

然后让你的改装界面返回VehicleResponseModel。