More Related Content More from Fumihiko Shiroyama More from Fumihiko Shiroyama (7) AndroidでEither11. Either<Throwable, String> either;
if (response.getCode() != 200) {
either = new Either.Left<>(new RuntimeException("error code");
} else {
either = new Either.Right<>("Right value!");
}
14. おいっしい例
Either<Throwable, String> either;
if (response.getCode() != 200) {
either = new Either.Left<>(new RuntimeException("error code");
} else {
either = new Either.Right<>("Right value!");
}
either.map(String::toUpperCase); 中がRightかLeftか意識し
なくていいのがミソ!
15. • map / flatMap などおなじみのメソッドがある
• 実体が何であるか気にする必要がないので抽象度が
高く本質にフォーカスしたコードが書ける
• 例外を使わないので複雑な例外ハンドリングが不要
• RxJava/RxAndroidと相性抜群
16. WeatherApiCreator.create(CurrentWeatherService.class).getByCityName(editTextCity.getText().toString())
.map(currentWeatherResponse -> {
Either<Throwable, String> either;
if (currentWeatherResponse.getCode() != 200) {
either = new Either.Left<>(new RuntimeException("error code: " + currentWeatherResponse.getCode()));
} else {
either = new Either.Right<>("Humidity: " + currentWeatherResponse.getMain().getHumidity());
}
return either;
})
.map(either -> either.map(String::toUpperCase))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
either -> either.apply(
left -> Toast.makeText(this, left.getMessage(), Toast.LENGTH_SHORT).show(),
right -> Toast.makeText(this, right, Toast.LENGTH_SHORT).show()
),
error -> Toast.makeText(this, error.getMessage(), Toast.LENGTH_SHORT).show()
);