【发布时间】:2016-01-26 07:30:40
【问题描述】:
我做了一个类扩展 AsyncTask 来解析 Json 使用 Gson,因为输入可以是多种类型的类我使用泛型类型:
public class ApiResponse<T> extends AsyncTask...
我需要知道 T 的类类型才能通过 Gson:
(1)
Class<T> clazz =
(Class<T>)((ParameterizedType)
getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
new Gson().fromJson(reader, clazz);
但是,这里的 T 可以是一个有很多类型的类,所以有时我会通过类:
(2)
public class DataMessage<T> implements Serializable{...}
由于这些类具有这种格式,我收到了一个异常原因:
java.lang.ClassCastException: libcore.reflect.ParameterizedTypeImpl cannot be cast to java.lang.Class
在 (1) 处
在这种情况下我该怎么办?
更新:
public class DataMessage<T> implements Serializable{
@SerializedName("pagination")
private Pagination pagination;
@SerializedName("meta")
private Message meta;
@SerializedName("data")
private T data;
public DataMessage(T data) {
this.data = data;
}
public Pagination getPagination() {
return pagination;
}
public void setPagination(Pagination pagination) {
this.pagination = pagination;
}
public Message getMeta() {
return meta;
}
public void setMeta(Message meta) {
this.meta = meta;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public class Pagination {
@SerializedName("next_max_tag_id")
public String nextMaxTagId;
@SerializedName("deprecation_warning")
public String deprecationWarning;
@SerializedName("next_max_id")
public String nextMaxId;
@SerializedName("next_min_id")
public String nextMinId;
@SerializedName("min_tag_id")
public String minTagId;
@SerializedName("next_url")
public String nextUrl;
}
public class Message {
@SerializedName("error_type")
public String errorType;
@SerializedName("code")
public int code;
@SerializedName("error_message")
public String error_message;
}
}
【问题讨论】:
-
能否将 Json 对象添加到问题中?
-
嗨,@AndreaCatania 先生,请看我更新了。
-
我参考了@yole 链接,发现 Gson 的输出是 LinkedTreeMap 无法转换为我的数据类型
-
如果可以粘贴 JSON 对象
标签: java android generics exception casting