Rxjava 关键字搜索优化

平时我们监听EditText输入文本的编号是这样,只要输入字符串就会请求网络,当A还没反馈数据时,B请求又出去了,可能B先回来,然后A才会回来,这样会导致搜索内容的不准确,当然,我们也可以自己做处理 if if if if if if。。。

    mEdittext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // do something
            // e 根据用户输入的关键字 获取网络数据 关键字搜索
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });

当我们有了RxJava,一切都变得好简单,对输入的文本进行时间的分割,比如500毫秒才让它去请求一次网络,这样可以初步的避免数据混乱,也优化了app性能,防止数据不混乱可以与Edittext文本做一次比较

    RxTextView.textChanges(mEdittext).filter(new Func1() { // 过滤,把输入字符串长度为0时过滤掉
        @Override
        public Boolean call(CharSequence charSequence) {
            return charSequence.toString().trim().length() > 0 ;
        }
    }).debounce(500, TimeUnit.MILLISECONDS)
      .flatMap(new Func1>>() {
        @Override
        public Observable> call(CharSequence charSequence) {
            // do something
            // e 根据用户输入的关键字 获取网络数据 关键字搜索
            // 从网络获取数据
            List list = new ArrayList();
            list.add("Test");
            return Observable.just(list);
        }
    }).subscribe(new Action1>() {
        @Override
        public void call(List strings) {
            Log.e("Test",strings.toString() );
        }
    });

你可能感兴趣的:(Rxjava 关键字搜索优化)