私はRxJava/RxAndroidの新バージョンです。 RxJava/RxAndroidを使用して、次のケースを実装したい:まず、ネットワークからデータを取得し、データのチェックを行い、チェックが失敗した場合はメインスレッドにエラーを表示する。Rxjava/RxAndroidでチェックチェーンを実装する方法
私はいくつかのRxJava操作を試してみたが、そうする良い方法を見つけることができません。 誰かがこれについて私を助けることができますか?どうもありがとう!
私はこのケースについていくつかのテストコードを書いています(文字列をデータとして使用します)。これ以上の簡単な方法はありますか?あなたは、単にデータをチェックし、エラーを投げるためmap()
を使用することができます
Observable.just(s)
.flatMap(new Function<String, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(final String s) throws Exception {
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
if(s.length() < 3){
e.onError(new Throwable("len"));
}else{
e.onNext(s);
e.onComplete();
}
}
});
}
}).flatMap(new Function<String, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(final String s) throws Exception {
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
if(s.startsWith("a")){
e.onError(new Throwable("start"));
}else{
e.onNext(s);
e.onComplete();
}
}
});
}
}).subscribeOn(AndroidSchedulers.mainThread())
.doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
System.out.println("get error: " + throwable.getMessage());
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println(s);
}
});
flatMapはあなたが探しているものです。 –
お返事ありがとうございます! –