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() );
        }
    });
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容