我搜索城市,如果它不存在,我想做一個與城市存在的情況不同的行爲。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);
}
所以當城市沒有找到我想要的警報給用戶,並在城市找到我想要進一步(保存到數據庫,打開主屏幕等)。我使用運算符filter(),但它不完全是我想要的,如果城市== null,它就不會更進一步。 你可以請一些更好的主意建議嗎?
什麼時候我把情況view.cityExists()方法中的城市被發現?它會以同樣的方法成爲另一個可觀察對象嗎? – alla
因此,在結果中,我不明白如何使用switchIfEmpty()(我會更詳細地閱讀它),但我喜歡這個想法返回Observable.error(e);或Observable.empty(); ,所以在onAddButtonClick()我在subscribe()方法中添加了以下代碼: 'throwable - > view.showCouldNotFindCity()', '() - > view.showCouldNotFindCity()' – alla