gpt4 book ai didi

android - rx java retrofit 2 错误处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:30 26 4
gpt4 key购买 nike

我正在使用 retrofit 2 和 rx java

情况:该应用程序发送一些请求,然后我得到自动转换为用户 dto 的 json 格式的响应,然后在 rx java 的 onNext 方法中我收到用户列表。如果我从服务器收到这样的消息怎么办:{"error":"can't get the list of users"}

retrofit 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());
}

最佳答案

根据服务器响应,您可能会或可能不会进入您的 onError 函数。如果服务器返回一个非 2XX 的 http 状态代码,您将进入 onError 方法。另一方面,如果您获得 2XX http 状态代码,您将输入 onNext

我假设您可以处理 onNext 位,我将在 onError 中解释如何处理。重要的是要认识到有很多方法可以做到这一点,这只是一个使用 okhttp 3retrofit 2 beta4 的示例。

因此,retrofit2 表示在使用 rxjava 时,每个非 2XX 的 http 响应都是 HttpException。这个你已经在你的代码中了:

if (e instanceof retrofit.HttpException) {
HttpException exception = (HttpException) e;
}

现在您要做的是获取响应的正文。这可以通过在 HttpException 中调用 Response response = exception.response() 来实现。通过响应,获取错误主体非常简单。您只需调用 response.errorBody()。然后,您可以将正文转换为 Java 对象或仅将其作为字符串访问。

由于您有一个 json 错误主体作为示例,下面是将响应主体转换为 java 对象的方法:

new GsonConverterFactory().responseBodyConverter(type,
new Annotation[0]).convert(response.errorBody());

其中 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());
}

MyError 是一个模型,表示您在问题中遇到的错误 json。

关于android - rx java retrofit 2 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36308910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com