【发布时间】:2018-01-11 09:33:36
【问题描述】:
我正在将API 调用(使用Retrofit)的响应传递给一个类,并尝试将其转换为我的模型类。由于我使用 retrofit 进行 API 调用,它会在使用 Gson 将其转换为模型类对象之前根据来自服务器的响应生成链接的哈希图。 (这就是我的理解,如果我错了,请纠正我)。我附上了一张我用响应对象调试时可以看到的图像。如何将此响应转换为我的模型类或对象类型的对象。 当我尝试将类型 Object 转换到我的活动中的模型类时,我遇到了类转换异常。
这是我的代码
API 调用
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.body() != null) {
List<CategoriesBaseModel> categoryBaseResponseList = (List<CategoriesBaseModel>) response.body();
List<Object> categoryResponseList = (List<Object>) categoryBaseResponseList.get(0).getData();
if (categoryResponseList != null) {
mCategoriesInterface.passCategoriesResponse(categoryResponseList, "HomeFragment");
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
call.cancel();
}
});
活动
CategoriesInterface categoriesInterface = new CategoriesInterface() {
@Override
public void passCategoriesResponse(List<Object> scheduleList, String name) {
CategoriesModel categoriesModel;
for (Object model : scheduleList){
categoriesModel = (CategoriesModel) model;
Log.d("TAG", "");
}
}
};
【问题讨论】:
-
看到这个页面,也许他会给你一个答案:stackoverflow.com/questions/32444863/…
-
错误是否恰好出现在这一行?:
categoriesModel = (CategoriesModel) model; -
@gil.fernandes 是的。正好在同一行
-
问题是它不能作为哈希映射访问,如果我投射对象会引发异常
-
虽然这不是一个很好的解决方案:您可以手动将
LinkedTreeMap转换为CategoriesModel对象。这绝对是可能的,但不是最优雅的解决方案。您可以将model对象转换为java.util.Map,然后愉快地获取每个字段。
标签: java android gson retrofit linkedhashmap