【发布时间】:2016-08-06 23:44:46
【问题描述】:
我有一个必须返回的存储库类: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);
}
如果有人知道更好的方法,请告诉我。
谢谢!
【问题讨论】: