原文地址:
http://sglora.com/android-tutorial-sobre-rxjava-i-lo-basico/
https://ykode.github.io/2015/02/20/android-frp-rxjava-retrolambda.html
getUserName().subscribe(
// On Next
mUserNameTextView::setText,
// OnError
throwable -> Log.e(TAG, throwable.getMessage(), throwable),
// OnComplete
() -> mLoadingProgressBar.setVisibility(View.GONE)
);
getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(user -> Log.d(TAG, "User = " + user),
error -> Log.e(TAG, error.getMessage(), error),
() -> Log.d(TAG, "Complete") );
附带Java8 lambda 语法 http://zh.lucida.me/blog/java-8-lambdas-insideout-language-features/
protected void onStart() {
super.onStart();
Observable<OnTextChangeEvent> userNameText =
WidgetObservable.text((EditText) findViewById(R.id.edtUserName));
userNameText.subscribe( e -> Log.d("[Rx]", e.text().toString()));
}
@Override
protected void onStart() {
super.onStart();
final Pattern emailPattern = Pattern.compile(
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"); // ..... [1]
EditText unameEdit = (EditText) findViewById(R.id.edtUserName);
EditText emailEdit = (EditText) findViewById(R.id.edtEmail);
Observable<Boolean> userNameValid = WidgetObservable.text(unameEdit) // [2]
.map(e -> e.text())
.map(t -> t.length() > 4);
Observable<Boolean> emailValid = WidgetObservable.text(emailEdit)
.map(e -> e.text())
.map(t -> emailPattern.matcher(t).matches());
emailValid.map(b -> b ? Color.BLACK : Color.RED)
.subscribe( color -> emailEdit.setTextColor(color)); // ... [3]
userNameValid.map( b -> b ? Color.BLACK : Color.RED)
.subscribe( color -> userNameEdit.setTextColor(color));
}
Button registerButton = (Button) findViewById(R.id.buttonRegister);
Observable<Boolean> registerEnabled =
Observable.combineLatest(userNameValid, emailValid, (a,b) -> a && b);
registerEnabled.subscribe( enabled -> registerButton.setEnabled(enabled));
emailValid.doOnNext( b -> Log.d("[Rx]", "Email " + (b ? "Valid" : "Invalid")))
.map(b -> b ? Color.BLACK : Color.RED)
.subscribe(color -> emailEdit.setTextColor(color));
userNameValid.doOnNext( b -> Log.d("[Rx]", "Uname " + (b ? "Valid" : "Invalid")))
.map(b -> b ? Color.BLACK : Color.RED)
.subscribe(color -> userNameEdit.setTextColor(color));
// and the registerenabled
registerEnabled.doOnNext( b -> Log.d("[Rx]", "Button " + (b ? "Enabled" : "Disabled")))
.subscribe( enabled -> registerButton.setEnabled(enabled));
emailValid.distinctUntilChanged()
.doOnNext( b -> Log.d("[Rx]", "Email " + (b ? "Valid" : "Invalid")))
.map(b -> b ? Color.BLACK : Color.RED)
.subscribe(color -> emailEdit.setTextColor(color));
userNameValid.distinctUntilChanged()
.doOnNext( b -> Log.d("[Rx]", "Uname " + (b ? "Valid" : "Invalid")))
.map(b -> b ? Color.BLACK : Color.RED)
.subscribe(color -> userNameEdit.setTextColor(color));
// and registerEnabled
registerEnabled.distinctUntilChanged()
.doOnNext( b -> Log.d("[Rx]", "Button " + (b ? "Enabled" : "Disabled")))
.subscribe( enabled -> registerButton.setEnabled(enabled));
github https://github.com/ykode/RxSample