Jen*_*yza 7 android rx-java retrofit
我正在使用改装2和rx java
情况:应用程序发送一些请求,然后我得到json格式的响应,自动转换为用户dto,然后在rx java的onNext方法中我收到用户列表.如果我从服务器收到这样的消息怎么办:{"error":"无法获取用户列表"}
如何通过改造2和rx来处理这种情况?
Subscription subscriptionBranches = model.getRepoBranches(owner, name)
.map(branchesMapper)
.subscribe(new Observer<List<Branch>>() {
@Override
public void onCompleted() {
;
}
@Override
public void onError(Throwable e) {
if (e instanceof retrofit.HttpException) {
HttpException exception = (HttpException) e;
}
showError(e);
}
@Override
public void onNext(List<Branch> list) {
branchList = list;
view.showBranches(list);
}
});
addSubscription(subscriptionBranches);
.....
@Override
public Observable<List<RepositoryDTO>> getRepoList(String name) {
return apiInterface
.getRepositories(name)
.compose(applySchedulers());
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*red 18
根据服务器响应,您可能会或可能不会进入您的onError功能.如果服务器返回非2XX http状态代码,您将进入该onError方法.另一方面,如果您获得2XX http状态代码,则输入onNext.
我假设你可以处理这onNext一点,我会解释你如何能够做到这一点onError.重要的是要意识到有很多方法可以做到这一点,这只是一个使用okhttp 3和改进2 beta4的例子.
因此,retrofit2表示每个非2XX http响应HttpException在使用时都是rxjava.您已经在代码中使用了它:
if (e instanceof retrofit.HttpException) {
HttpException exception = (HttpException) e;
}
Run Code Online (Sandbox Code Playgroud)
现在你要做的就是获得响应的主体.这可以通过Response response = exception.response()在HttpException那里打电话来实现.通过响应,获取错误正文非常简单.你打电话response.errorBody().然后,您可以将主体转换为java对象,或者只是将其作为字符串进行访问.
由于您有一个json错误主体作为示例,以下是如何将响应主体转换为java对象:
new GsonConverterFactory().responseBodyConverter(type,
new Annotation[0]).convert(response.errorBody());
Run Code Online (Sandbox Code Playgroud)
where type表示错误的java对象的类.
所以把它们放在一起,在你的onError方法上你可以写下这样的东西:
if (e instanceof retrofit.HttpException) {
HttpException exception = (HttpException) e;
Response response = exception.response();
Converter<ResponseBody, MyError> converter = new GsonConverterFactory()
.responseBodyConverter(MyError.class, Annotation[0]);
MyError error = converter.convert(response.errorBody());
}
Run Code Online (Sandbox Code Playgroud)
MyError 是一个模型,表示您在问题中的错误json.
| 归档时间: |
|
| 查看次数: |
9388 次 |
| 最近记录: |