都市を検索し、存在しない場合は、都市が存在する状況とは異なる行動をしたい。RxJava:条件付きコード
public void onAddButtonClick(String cityName) {
Subscription subscription = repository.getCity(cityName)
.filter(city -> city != null)
.subscribeOn(backgroundThread)
.flatMap(city -> repository.saveCityToDb(city))
.observeOn(mainThread)
.subscribe(city -> view.cityExists());
subscriptions.add(subscription);
}
getCity()
方法:
public Observable<City> getCity(String name){
return fileRepository.getCityFromFile(name);
}
とgetCityFromFile()
public Observable<City> getCityFromFile(String cityName){
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.fromCallable(() -> city);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return Observable.fromCallable(() -> null);
}
だから、都市が見つからない場合、私は、ユーザーにアラートを作りたいと都市が発見されたときに私が欲しいですさらに進む(DBに保存し、メイン画面を開くなど)。私は演算子filter()を使用しますが、正確には私が望むものではありません。 いくつか良いアイデアを教えていただけますか?
を
empty
かerror
を使用しますか?それは同じ方法で別のオブザーバブルになるのだろうか? – allaその結果、switchIfEmpty()の使用方法がわかりませんでした(詳細はこの記事を読んでいます)が、Observable.error(e)を返すという考えが好きでした。 Observable.empty();したがって、onAddButtonClick()では、subscribe()メソッドで次のコードを追加しました。 'throwable - > view.showCouldNotFindCity()'、 '() - > view.showCouldNotFindCity()' – alla