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<CharSequence, Boolean>() { // 过滤,把输入字符串长度为0时过滤掉
        @Override
        public Boolean call(CharSequence charSequence) {
            return charSequence.toString().trim().length() > 0 ;
        }
    }).debounce(500, TimeUnit.MILLISECONDS)
      .flatMap(new Func1<CharSequence, Observable<List<String>>>() {
        @Override
        public Observable<List<String>> call(CharSequence charSequence) {
            // do something
            // e 根据用户输入的关键字 获取网络数据 关键字搜索
            // 从网络获取数据
            List<String> list = new ArrayList<String>();
            list.add("Test");
            return Observable.just(list);
        }
    }).subscribe(new Action1<List<String>>() {
        @Override
        public void call(List<String> strings) {
            Log.e("Test",strings.toString() );
        }
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容