我想做一些我将从网络服务器收到的POJO课程。
我的网络服务器将始终返回此结构中的json:
{
'data':Object or array or null,
'status':Integer,
'message':String or null
}
这是BaseResponse:
public class BaseResponse {
private Object data;
private int status;
private String message;
public Object getData() { return this.data; }
public int getStatus() { return this.status; }
public String getMessage() { return this.message; }
}
然后我有一个'真正'的回应类:
public class LoginResponse extends BaseResponse {
private UserData data;
@Override
public UserData getData() { return data; }
}
UserData
是另一个看起来与这些类似但具有不同变量名称(id和name)的类。
我尝试解析这样的响应:
try {
LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
Log.i(PF.TAG, "ID: " + json.getData().getName());
}
但它在fromJson()上抛出一个异常,说:
LoginResponse声明了多个名为data
的JSON字段
如何解决这个问题,并且仍然在BaseResponse
?
答案 0 :(得分:1)
您可以使用泛型类型。
public class BaseResponse<T> {
private T data;
private int status;
private String message;
public T getData(){
return this.data;
}
public int getStatus(){
return this.status;
}
public String getMessage(){
return this.message;
}
}
示例响应类型:
public class LoginResponse extends BaseResponse<UserData>{
}
然后你可以使用:
LoginResponse json = gson.fromJson(jsonString, LoginResponse.class);
Log.i(PF.TAG, "ID: " + json.getData().getName());
使用此方法,T可以是您想要的任何对象。