stk*_*ent 8 android retrofit okhttp retrofit2 okhttp3
改装版本:2.1.0
OkHttp版本:3.4.1
在onResponse我的Retrofit Callback实现方法中,我有以下逻辑:
@Override
public void onResponse(Call<BaseResponseBody<T>> call, Response<BaseResponseBody<T>> response) {
if (response != null && response.isSuccessful() && response.body() != null && response.body().containsValidSuccess()) {
// Perform actions using response.body().getValue().
} else {
// If containsValidSuccess returns false, show a dialog that includes the raw JSON response body.
}
}
Run Code Online (Sandbox Code Playgroud)
这BaseResponseBody是我自己的类型(与OkHttp无关ResponseBody)包装泛型类型T extends Validatable,其中Validatable是一个接口,isValid用于公开用于确认反序列化响应满足给定约束的方法.
如果我收到表面上成功的响应(HTTP代码2XX,非空响应主体等),但其反序列化主体未通过此验证步骤(即containsValidSuccess返回false),我想提供一个对话框,其消息包括的原料(反序列化预)响应体.但是,我似乎无法通过Retrofit Response类型访问此原始响应正文.
我读过其他似乎暗示Interceptor可能更适合我需求的页面.我熟悉拦截器,并在我的应用程序中使用它们进行其他调用操作,但是我没有确切地知道如何将拦截器中的信息传递给最终Callback.onResponse方法以呈现对话框.
我在正确的道路上吗?我是否遗漏了Retrofit API中的一些明显内容?我怎样才能达到既定目标?谢谢!
尝试这个
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response != null && response.isSuccessful() && response.body() != null && response.body().containsValidSuccess()) {
// Perform actions using response.body().getValue().
} else {
// If containsValidSuccess returns false, show a dialog that includes the raw JSON response body.
}
}
Run Code Online (Sandbox Code Playgroud)
之后你可以像这样把它放到你的 POJO 中
Gson g= new Gson();
POJOClass pojo=g.fromJson(response.body,POJOClass.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |