我们正在使用GSON解析okhttp响应对象。
为了允许通用的解析逻辑,我们打开了使用setType(Type type)传递一种响应,现在使用下面的代码来解析所有响应。
Object mResponse = mGson.fromJson(response.body().string(), mType);
由于此代码未打开进行更改,因此我扩展了此类并重写了解析响应方法。我还创建了一个名为MyRespose的新类,并希望使用setType方法中传递的任何类型进行初始化,以便向使用者返回它们传递的类型的对象,而不是Object类的实例。
public class MyResponse<T> {
private int mStatus;
private T mResponseData;
public MyResponse(int status, T responseBody) {
this.mStatus = status;
mResponseData = responseBody;
}
public MyResponse(T responseBody) {
mResponseData = responseBody;
}
public int getStatus() {
return mStatus;
}
public void setStatus(int status) {
this.mStatus = status;
}
public T getResponseData() {
return mResponseData;
}
public void setResponseData(T responseData) {
mResponseData = responseData;
}
}
如何使用Type(接口)传递,以便当有人调用getResponseData时它返回在setType而不是通用Object中传递的类型的对象?
像
这样的东西Object mResponse = mGson.fromJson(response.body().string(), mType);
mMyResponse = new MyResponse<???>(response.code(), mResponse );
我如何使用mType来传递&#34; ???&#34;
答案 0 :(得分:0)
我想,你可以在这里使用TypeToken
。它包含在Gson中,应该是这样的。
Type responseType = new TypeToken<MyResponse<XYZ>>() {}.getType();
gson.fromJson(json, responseType);
您可以在此here
上进一步阅读