public class ApiResponse<T> {
public boolean success;
public T data;
}
@GET(...)
Observable<ApiResponse<User>> getUser();
response.getData().getUserId();
@GET(...)
Observable<User> getUser();
{
"success": true,
"data": {
"id": 22,
"firstname": "Jon",
"lastname": "Snow"
}
}
编辑2:我已经用改型拦截器手动修改响应体来完成这个任务。它是有效的,但如果你有任何其他建议,请发布它们:)
正如所说,用拦截器解决问题并不是很好。我已经设法用Rx变压器解决了这个问题。我还添加了自定义api异常,当出现错误时,我可以抛出该异常,并在OnError中轻松处理。我觉得它更健壮。
响应包装:
public class ApiResponse<T> {
private boolean success;
private T data;
private ApiError error;
}
当成功为false时返回的错误对象:
public class ApiError {
private int code;
}
public class ApiException extends RuntimeException {
private final ApiError apiError;
private final transient ApiResponse<?> response;
public ApiException(ApiResponse<?> response) {
this.apiError = response.getError();
this.response = response;
}
public ApiError getApiError() {
return apiError;
}
public ApiResponse<?> getResponse() {
return response;
}
}
protected <T> Observable.Transformer<ApiResponse<T>, T> applySchedulersAndExtractData() {
return observable -> observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(tApiResponse -> {
if (!tApiResponse.isSuccess())
throw new ApiException(tApiResponse);
else
return tApiResponse.getData();
});
}
我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?
我在Android应用程序中实现Json反序列化时遇到了一些问题(带有Gson库)
问题内容: 我正在使用GSON 1.4,并使用两个通用对象序列化对象,如下所示 。当我对它进行反序列化时 可悲的是我得到了 java.lang.IllegalArgumentException:无法将java.util.ArrayList字段…设置为java.util.LinkedList 这是为什么 ?GSON文档指出,如果我使用object.class参数进行序列化,则它支持泛型。任何想法?谢
我有一个Api,Api如下所示: 如果响应是ok,那么结构将以关键字开头,例如: 问题是:我如何为父类创建一个反序列化器,它也会反序列化子类(作为我的第二种方法),或者我如何用Gson创建一个泛型类,这样包装在周围的每个tyoe都可以与它一起使用,比如: public class DataObjectDeserializer implements JsonDeserializer{
您将获得对象(或对象列表),而不是作为传递的实际对象(或第二种情况下的实际对象列表)。 如果您想要一个仍然想要反序列化泛型类型对象(-s),请参阅下面的答案。 +红利:LoopJ+GSON的最终通用解决方案 如何获取泛型接口的具体类型 Java类型Generic作为GSON的参数
问题内容: 我在Android应用程序(带有Gson库)中实现Json反序列化存在一些问题 我已经上了这样的课 反序列化的调用是: 问题是调用后的result.posts列表包含一个LinkedTreeMap对象数组(具有正确的值,因此问题是反序列化)而不是MyJson对象。当我使用MyObject而不是T时,一切运行正常并且MyObject是正确的。 那么,有什么方法可以在不创建自定义反序列化器