越多作品,欢迎访问小编的 Android新濠娱乐, 知识梳理类别:

② 、示例解析

2.2 combineLatest 和 zip 的区别

zipcombineLatest接受的参数格式相同,大家在 本田CR-VxJava2
实战知识梳理(4) – 结合 Retrofit
请求音信托投资讯

中用它来实现等待多少个Observable都发出之后才开展数量的组成,回看一下它的法则图:

zip 原理图

zipcombineLatest的区分在于:

  • zip是在里头1个Observable发出数量项后,组合具有Observable最早三个未被整合的数目项,也正是说,组合后的Observable发射的第n个数据项,必然是各类源由Observable独家发射的第n个数据项组成的。
  • combineLatest则是在里头三个Observable发出数量项后,组合具有Observable所发出的末段一个数码项(前提是拥有的Observable都至少发射过一个多少项)。

2.2 示例

在底下那几个示例中,包蕴了多少个输入框,分别对利用户名和密码,它们的长度供给分别为2~84~16,如果双方都毋庸置疑,那么登录按钮的文案变为“登录”,不然突显“用户名或密码无效”。

public class CombineLatestActivity extends AppCompatActivity {

    private EditText mEtName;
    private EditText mEtPassword;
    private Button mBtLogin;
    private PublishSubject<String> mNameSubject;
    private PublishSubject<String> mPasswordSubject;
    private CompositeDisposable mCompositeDisposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_combine_latest);
        mEtName = (EditText) findViewById(R.id.et_name);
        mEtPassword = (EditText) findViewById(R.id.et_password);
        mBtLogin = (Button) findViewById(R.id.bt_login);
        mNameSubject = PublishSubject.create();
        mPasswordSubject = PublishSubject.create();
        mEtName.addTextChangedListener(new EditTextMonitor(mNameSubject));
        mEtPassword.addTextChangedListener(new EditTextMonitor(mPasswordSubject));
        Observable<Boolean> observable = Observable.combineLatest(mNameSubject, mPasswordSubject, new BiFunction<String, String, Boolean>() {

            @Override
            public Boolean apply(String name, String password) throws Exception {
                int nameLen = name.length();
                int passwordLen = password.length();
                return nameLen >= 2 && nameLen <= 8 && passwordLen >= 4 && passwordLen <= 16;
            }

        });
        DisposableObserver<Boolean> disposable = new DisposableObserver<Boolean>() {

            @Override
            public void onNext(Boolean value) {
                mBtLogin.setText(value ? "登录" : "用户名或密码无效");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }

        };
        observable.subscribe(disposable);
        mCompositeDisposable = new CompositeDisposable();
        mCompositeDisposable.add(disposable);
    }

    private class EditTextMonitor implements TextWatcher {

        private PublishSubject<String> mPublishSubject;

        EditTextMonitor(PublishSubject<String> publishSubject) {
            mPublishSubject = publishSubject;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            mPublishSubject.onNext(s.toString());
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mCompositeDisposable.clear();
    }
}

在地点的例证中,大家先是创制了三个PublishSubject,分别用于用户名和密码的订阅,然后经过combineLatest对那五个PublishSubject展开整合。那样,当任意贰个PublishSubject出殡事件现在,就会回调combineLatest末段1个函数的apply方法,该方法会取到种种被考察的PublishSubject终极3次发出的多少,大家通过该数量进行验证。

末尾运转的效率为:

2.1 combineLatest 原理

combineLatest的原理图如下所示:

combineLatest 原理图

该操作符接受五个Observable以及三个函数作为参数,并且函数的署名为这个Observable发出的数据类型。当以上的私自贰个Observable发出数量之后,会去取别的Observable
不久前三回发出的数量,回调到函数个中,但是该函数回调的前提是享有的Observable至少发射过3个数目项

揽胜极光xJava2 实战类别小说

劲客xJava2 实战知识梳理(1) – 后台执行耗费时间操作,实时通报 UI
更新

TiguanxJava2 实战知识梳理(2) –
总结一段时间内数据的平均值

TiggoxJava2 实战知识梳理(3) –
优化搜索联想功用

TiguanxJava2 实战知识梳理(4) – 结合 Retrofit
请求音信资源新闻

宝马7系xJava2 实战知识梳理(5) –
不难及进阶的轮询操作

奥迪Q3xJava2 实战知识梳理(6) –
基于错误类型的重试请求

纳瓦拉xJava2 实战知识梳理(7) – 基于 combineLatest
实现的输入表单验证

福特ExplorerxJava2 实战知识梳理(8) – 使用 publish + merge
优化先加载缓存,再读取网络数据的伏乞进度

途观xJava2 实战知识梳理(9) – 使用 timer/interval/delay
落成义务调度

奥德赛xJava2 实战知识梳理(10) – 显示屏旋转导致 Activity
重建时上涨任务

ENCORExJava2 实战知识梳理(11) –
检查和测试互连网状态并自行重试请求

揽胜极光xJava2 实战知识梳理(12) – 实战讲解 publish & replay & share & refCount
& autoConnect

EnclavexJava2 实战知识梳理(13) –
怎么着使得错误产生时不活动甘休订阅关系

酷路泽xJava2 实战知识梳理(14) – 在 token 过期时,刷新过期 token
相提并论新发起呼吁

凯雷德xJava2 实战知识梳理(15) – 达成四个简短的 MVP + 奥迪Q7xJava + Retrofit
应用


2.1 应用背景

在经常的使用中,我们平日会让用户输入一些新闻,最广大的实际注册也许登录界面中,让用户输入用户名大概密码,不过我们平时会对用户名也许密码有肯定的供给,唯有当它们同时满足需求时,才同意用户展开下一步的操作。

以此要求就提到到一种模型,即在多个地点监听变化,可是在一个地点开始展览合并验证,借使注解成功,那么允许用户展开下一步的操作,不然提醒用户输入不科学。

通过这一个例子,大家将学习到combineLatest操作符的用法。

一、前言

网站地图xml地图