У меня есть класс репозитория, который должен возвращать это: 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);
}
Если кто-то знает лучший подход, пожалуйста, скажите мне.
Спасибо!