Skip to content

Instantly share code, notes, and snippets.

View benigumocom's full-sized avatar
🏠
🙆

chanzmao benigumocom

🏠
🙆
View GitHub Profile
@benigumocom
benigumocom / Being Reactive.java
Created April 14, 2017 15:22
Being Reactive 1
interface UserManager {
User getUser();
void setName(String name);
void setAge(int age);
}
@benigumocom
benigumocom / Being Reactive.java
Created April 14, 2017 15:24
Being Reactive 2
interface UserManager {
Observable<User> getUser();
Completable setName(String name);
Completable setAge(int age);
}
@benigumocom
benigumocom / Being Reactive.java
Last active April 14, 2017 15:34
Being Reactive 3
// onCreate
disposables.add(um.getUser()
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<User>() {
@Override public void onNext(User user) {
tv.setText(user.toString());
}
@Override public void onComplete() { /* ignored */ }
@Override public void onError(Throwable t) { /* crash or show */ }
}
@benigumocom
benigumocom / Being Reactive.java
Created April 14, 2017 15:38
Being Reactive 1
// onCreate
disposables.add(um.getUser()
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<User>() {
@Override public void onNext(User user) {
tv.setText(user.toString());
}
@Override public void onComplete() { /* ignored */ }
@Override public void onError(Throwable t) { /* crash or show */ }
}));
@benigumocom
benigumocom / Managing State.java
Created April 14, 2017 15:41
Managing State 1
disposables.add(RxView.clicks(submitView)
.doOnNext(ignored -> {
submitView.setEnabled(false);
progressView.setVisibility(VISIBLE);
})
.flatMap(ignored -> service.setName(nameView.getText().toString()))
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(ignored -> progressView.setVisibility(GONE))
.subscribe(s -> finish(), t -> {
submitView.setEnabled(true);
@benigumocom
benigumocom / Reactive State.java
Created April 14, 2017 15:45
Reactive State 1
final class SubmitUiModel {
final boolean inProgress;
final boolean success;
final String errorMessage;
private SubmitUiModel(boolean inProgress, boolean success, String errorMessage) {
// ...
}
@benigumocom
benigumocom / Reactive State.java
Created April 14, 2017 15:48
Reactive State 2
disposables.add(RxView.clicks(submitView)
.map(ignored -> new SubmitEvent(nameView.getText().toString()))
.doOnNext(ignored -> {
submitView.setEnabled(false);
progressView.setVisibility(VISIBLE);
})
.flatMap(event -> service.setName(event.name))
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(ignored -> progressView.setVisibility(GONE))
.subscribe(s -> finish(), t -> {
@benigumocom
benigumocom / Reactive State.java
Created April 14, 2017 15:49
Reactive State 3
final class SubmitUiModel {
final boolean inProgress;
final boolean success;
final String errorMessage;
private SubmitUiModel(
boolean inProgress, boolean success, String errorMessage) {
// ...
}
static SubmitUiModel inProgress() { /* ... */ }
static SubmitUiModel success() { /* ... */ }
@benigumocom
benigumocom / Reactive State.java
Created April 14, 2017 15:55
Reactive State 4
disposables.add(RxView.clicks(submitView)
.map(ignored -> new SubmitEvent(nameView.getText().toString()))
.flatMap(event -> service.setName(event.name)
.map(response -> SubmitUiModel.success())
.onErrorReturn(t -> SubmitUiModel.failure(t.getMessage()))
.observeOn(AndroidSchedulers.mainThread())
.startWith(SubmitUiModel.inProgress()))
.subscribe(model -> {
submitView.setEnabled(!model.inProgress);
progressView.setVisibility(model.inProgress ? VISIBLE : GONE);
@benigumocom
benigumocom / Reactive State.java
Created April 14, 2017 15:57
Reactive State 5
Observable<SubmitEvent> events = RxView.clicks(submitView)
.map(ignored -> new SubmitEvent(nameView.getText().toString()));
Observable<SubmitUiModel> models = events
.flatMap(event -> service.setName(event.name)
.map(response -> SubmitUiModel.success())
.onErrorReturn(t -> SubmitUiModel.failure(t.getMessage()))
.observeOn(AndroidSchedulers.mainThread())
.startWith(SubmitUiModel.inProgress()));