平時我們監(jiān)聽EditText輸入文本的編號是這樣流部,只要輸入字符串就會請求網(wǎng)絡(luò)谆刨,當(dāng)A還沒反饋數(shù)據(jù)時,B請求又出去了归斤,可能B先回來痊夭,然后A才會回來,這樣會導(dǎo)致搜索內(nèi)容的不準(zhǔn)確脏里,當(dāng)然她我,我們也可以自己做處理 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 根據(jù)用戶輸入的關(guān)鍵字 獲取網(wǎng)絡(luò)數(shù)據(jù) 關(guān)鍵字搜索
}
@Override
public void afterTextChanged(Editable s) {
}
});
當(dāng)我們有了RxJava,一切都變得好簡單矾踱,對輸入的文本進行時間的分割恨狈,比如500毫秒才讓它去請求一次網(wǎng)絡(luò),這樣可以初步的避免數(shù)據(jù)混亂呛讲,也優(yōu)化了app性能禾怠,防止數(shù)據(jù)不混亂可以與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 根據(jù)用戶輸入的關(guān)鍵字 獲取網(wǎng)絡(luò)數(shù)據(jù) 關(guān)鍵字搜索
// 從網(wǎng)絡(luò)獲取數(shù)據(jù)
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() );
}
});