美文网首页Android静水流深
rx-android试用笔记(1)

rx-android试用笔记(1)

作者: BingoStyle | 来源:发表于2015-04-23 10:23 被阅读743次

    最近微博不时看到有提到rx-java,联系到之前看到的reactjs,也就抽时间学习了一下,并一直在思考此种模式的优劣。目前得出的结论是:

    ** 优点**

    • 天然支持并发
    • 代码更易读

    缺点

    • 抽象程度太过了(纠结中,觉得也算优点)
    • java语言上及android对其的支持上还不够(对比.NET)

    今天就拿从ReactiveCocoa处看到的一个使用场景来练手,先上代码:

    public class LoginActivity extends Activity {
        @InjectView(R.id.username)
        EditText usernameEditText;
        @InjectView(R.id.password)
        EditText passwordEditText;
        @InjectView(R.id.signin)
        Button signinButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            ButterKnife.inject(this);
    
            Observable<Boolean> observableUsername =  WidgetObservable.text(usernameEditText).map(new Func1<OnTextChangeEvent, Boolean>() {
                @Override
                public Boolean call(OnTextChangeEvent onTextChangeEvent) {
                    Boolean validateState = onTextChangeEvent.view().getText().length() > 6;
                    if(!validateState) {
                        onTextChangeEvent.view().setError("length must great 6");
                    }
                    return validateState;
                }
            });
    
            Observable<Boolean> observablePassword =  WidgetObservable.text(passwordEditText).map(new Func1<OnTextChangeEvent, Boolean>() {
                @Override
                public Boolean call(OnTextChangeEvent onTextChangeEvent) {
                    Boolean validateState = onTextChangeEvent.view().getText().length() > 3;
                    if(!validateState) {
                        onTextChangeEvent.view().setError("length must great 3");
                    }
                    return validateState;
                }
            });
    
    
            Observable.combineLatest(observableUsername, observablePassword, new Func2<Boolean, Boolean, Boolean>(){
                @Override
                public Boolean call(Boolean validateStateUsername, Boolean validateStatePassword) {
                    return validateStateUsername && validateStatePassword;
                }
            }).startWith(false).subscribe(new Action1<Boolean>() {
                @Override
                public void call(Boolean state) {
                    signinButton.setEnabled(state);
                }
            });
        }
    }
    

    要在有lambda表达式的情况下,代码可更精简易读。

    相关文章

      网友评论

      本文标题:rx-android试用笔记(1)

      本文链接:https://www.haomeiwen.com/subject/outpfttx.html