将数组转换为Java

时间:2016-05-04 12:01:29

标签: java arrays casting retrofit2

我有一个响应类 - MyResponse如下所示,使用Retrofit2调用服务器。 resource是一个对象数组。

public class MyResponse {
@SerializedName("success")
@Expose
private Boolean success;

@SerializedName("resource")
@Expose
private Array[] resource;

public ApiResponse(Boolean done, Array[] resource) {
    this.done = done;
    this.resource = resource;
}
//getters and setters
}

在Activity中,我创建了一个Array,如下所示:

MyResponse decodedResponse = response.body();
Array[] catsList = decodedResponse.getResource();

我有一个Model类Category,如下所示:

public class Category {
    @SerializedName("id")
    @Expose
    private Integer id;

    @SerializedName("category")
    @Expose
    private String category;

    //getters, setter and constructor
}

上面的catsList数组的每个对象都遵循上面的类别模型(带有id和类别键)。现在我如何从上面的catsList数组中创建一个Category(Category[])数组?

我不能像Category[] catsList = decodedResponse.getObject();那样做,因为我想为其他模型创建更多数组。因此,我计划如上所述创建一个通用的MyResponse类,并在需要时将其生成的数组转换为特定的模型。

也不支持以下方法(在MyResponse中更改Array[] =to=> Object[]之后)。它给出java.lang.ClassCastException: java.lang.Object[] cannot be cast to my.package.Category[]例外。

Object[] catsList = decodedResponse.getObject();
Category[] catsListCooked = (Category[]) catsList;

修改 我对服务器的JSON响应对每种请求类型都有相同的样式,并且对一种请求类型使用一种模型。因为Retrofit想要知道哪个模型类将用于呼叫,以便进行如下呼叫。

@GET()
Call<MyResponse> getCategories(@Url String url);

注意: 如果我能以其他方式执行此操作,请更正我。因为我如上所述打电话,所以我需要有一个班级才能打电话。

所以我想做的是创建一个主响应(如上所述的MyResponse),它将接收响应,然后根据请求类型使用每个模型获取接收的数据。在进行调用时无法直接使用模型,因为我有来自服务器的自定义JSON响应。

即。如果直接使用模型,那么它会产生错误,例如预期的BEGIN_ARRAY但提供BEGIN_OBJECT 预期的BEGIN_OBJECT但提供BEGIN_ARRAY

如下所述,根据建议的重复项,this suggestion ytg似乎可以实现解决方案。但是在那里建议使用Arrays.copyOf(),它似乎不是创建Category[]数组有用,因为它给出了#34; ...不能存储在类型的目标数组中......&#34 ;错误。在我的案例中,该问题的其他解决方案也是不可行的。

0 个答案:

没有答案