名前からファイルから特定の都市を取得したいとします。もし都市が見つからなければ、私はObservable.empty()を返します。それ以外の場合はObservable.just(city)を返します。RxJava:Observable.justの後もObservable.empty()が呼び出されます。
public void onAddButtonClick(String cityName) {
Subscription subscription = repository.getCity(cityName)
.subscribeOn(backgroundThread)
.flatMap(city -> repository.saveCityToDb(city))
.observeOn(mainThread)
.subscribe(
city -> view.cityExists(),
throwable -> view.showCouldNotFindCity(),
() -> view.showCouldNotFindCity()
);
subscriptions.add(subscription);
}
そして方法getCity()
: は、ここでは、コードです
public Observable<City> getCity(String cityName){
return Observable.defer(() -> {
try {
InputStream is = assetManager.open(FILE_NAME);
Scanner scanner = new Scanner(is);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.toLowerCase().contains(cityName.toLowerCase())) {
String[] cityParams = line.split("\t");
City city = new City();
city.setId(Long.parseLong(cityParams[0]));
city.setName(cityParams[1]);
return Observable.just(city);
}
}
} catch (IOException e) {
return Observable.error(e);
}
return Observable.empty();
});
}
しかし、都市が発見された場合に問題があり、それはそれは私がなぜ知らないreturn Observable.empty();
に行くObservable.just(city);
を返します。とにかくコード() -> view.showCouldNotFindCity()
が呼び出されます。
エラーがない限り、 'view.showCouldNotFindCity()'が常に呼び出されます。これはあなたが望むものではありませんか? – Will
@ウィルしかし、私は2つの選択肢があります:都市が見つかった場合、都市が見つからない場合。コードはルーツルによって異なります。それを行う最善の方法は何ですか? – alla