gpt4 book ai didi

android - 在 RxJava + Retrofit 失败的情况下返回自定义异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:05 25 4
gpt4 key购买 nike

我有一个必须返回这个的存储库类:Observable<List<SomeObject> ,我这样做:

 @Override
public Observable<List<SomeObject>> getAllById(Long id) {
if (!AndroidUtils.isNetworkAvailable(mContext))
return Observable.error(new NoNetworkConnectionException());

return mRestService.get(id);
}

这种方法正常工作,问题是我想返回自定义异常万一失败,但我不知道用 rxjava 做这个的最好方法。

到目前为止,唯一可行的解​​决方案是这样的:

@Override
public Observable<List<SomeObject>> getAllById(Long id) {
if (!AndroidUtils.isNetworkAvailable(mContext))
return Observable.error(new NoNetworkConnectionException());

return Observable.create(subscriber -> {
mRestService.get(id).subscribe(new Observer<List<SomeObject>>() {
@Override
public void onCompleted() {
subscriber.onCompleted();
}

@Override
public void onError(Throwable e) {
if (e instanceof HttpException && ((HttpException) e).code() == 401)
subscriber.onError(new UnathorizedException());
else
subscriber.onError(e);
}

@Override
public void onNext(List<SomeObject> objects) {
subscriber.onNext(objects);
}
});
});
}

我知道使用 Observable.create 不是一件好事,但我想不通另一种方法来做到这一点。

RestService 是这样的:

public interface RestService {

@GET("objects/{id}")
Observable<List<SomeObject>> get(@Path("id") Long id);
}

如果有人知道更好的方法,请告诉我。

谢谢!

最佳答案

您可以使用运算符 onErrorResumeNext 将您的异常映射到另一个异常。

mRestService.get(id)
.onErrorResumeNext(e -> {
if (e instanceof HttpException && ((HttpException) e).code() == 401)
return Observable.error(new UnathorizedException());
else
return Observable.error(e);
})
.subscribe();

关于android - 在 RxJava + Retrofit 失败的情况下返回自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809657/

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