-
Scheduler線程切換——eg:后臺線程取數(shù)據(jù)曙强,主線程展示
Flowable.just(1, 2, 3, 4)
.subscribeOn(Schedulers.io()) // 指定 subscribe() 發(fā)生在 IO 線程
.observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回調發(fā)生在主線程
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
}
});
- CheckBox狀態(tài)實時更新
private void checkBoxState(){
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
RxSharedPreferences rxPreferences = RxSharedPreferences.create(preferences);
Preference<Boolean> xxFunction = rxPreferences.getBoolean("isfirst", false);
checkBox.setChecked(xxFunction.get());
RxCompoundButton.checkedChanges(checkBox).subscribe(xxFunction.asConsumer());
}
-
輸入框改變即網(wǎng)絡請求(操作)——eg:輸入投資金額計算收益、搜索關鍵系提醒
private void editTextChange() {
RxTextView.textChanges(edittext)
.debounce(1000, TimeUnit.MILLISECONDS)//當你敲完字停下來1秒就會執(zhí)行下面語句
.filter(new Predicate<String>() {
@Override
public boolean test(String text) throws Exception {
if (text.isEmpty()) {
textViewResult.setText("");
return false;
} else {
return true;
}
}
})
.distinctUntilChanged()//用于防止重復執(zhí)行得到相同結果
//下面這兩個都是數(shù)據(jù)轉換
//flatMap:當同時多個網(wǎng)絡請求訪問的時候逆瑞,前面的網(wǎng)絡數(shù)據(jù)會覆蓋后面的網(wǎng)絡數(shù)據(jù)
//switchMap:當同時多個網(wǎng)絡請求訪問的時候笨篷,會以最后一個發(fā)送請求為準斟湃,前面網(wǎng)路數(shù)據(jù)會被最后一個覆蓋
.switchMap(new Function<CharSequence, ObservableSource<List<String>>>() {
@Override
public ObservableSource<List<String>> apply(@NonNull CharSequence charSequence) throws Exception {
//網(wǎng)絡操作,獲取我們需要的數(shù)據(jù)
List<String> list = new ArrayList<String>();
list.add("我在進行網(wǎng)絡請求");
return Observable.just(list);
}
})
.subscribeOn(Schedulers.io()) //網(wǎng)絡請求是在子線程的
.observeOn(AndroidSchedulers.mainThread())//界面更新在主線程
.subscribe(new Consumer<List<String>>() {
@Override
public void accept(@NonNull List<String> strings) throws Exception {
//網(wǎng)絡請求結果
}
});
-
輸入框過濾——eg:登錄注冊等常用過濾
private void combineLatestEvents() {
Flowable<CharSequence> numberChangeObservable = RxTextView.textChanges(edittextUser).skip(1).toFlowable(BackpressureStrategy.LATEST);
Flowable<CharSequence> passwordChangeObservable = RxTextView.textChanges(edittextPassword).skip(1).toFlowable(BackpressureStrategy.LATEST);
Flowable.combineLatest(
numberChangeObservable,
passwordChangeObservable,
new BiFunction<CharSequence, CharSequence, Boolean>() {
@Override
public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2) throws Exception {
//進行輸入框過濾判斷
return true;
}
})
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(@NonNull Boolean aBoolean) throws Exception {
if (aBoolean) { //過濾判斷后相應的操作
} else {
}
}
});
}
-
倒計時——eg:啟動頁或發(fā)送驗證碼
public void onClick(View v) {
final long count = 3;
Observable.interval(0, 1, TimeUnit.SECONDS)//(long initialDelay, long period, TimeUnit unit)
//參數(shù)一:延時initialDelay秒辑甜;參數(shù)二:每隔period秒開始執(zhí)行
.take(count + 1)//執(zhí)行count + 1次(沒有該方法不會停止)
.map(new Function<Long, Long>() {
@Override
public Long apply(@NonNull Long aLong) throws Exception {
return count - aLong;
}
})
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(@NonNull Disposable disposable) throws Exception {
//進入倒計時
button.setEnabled(false);
button.setTextColor(Color.BLUE);
}
})
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(Long aLong) {
button.setText( aLong + "S后重新發(fā)發(fā)送");
}
@Override
public void onError(Throwable e) {}
@Override
public void onComplete() {
button.setEnabled(true);
button.setTextColor(Color.RED);
button.setText("發(fā)送驗證碼");
}
});
}
- 防抖動
/**
* 防止抖動
*/
@NonNull
public static Observable<Object> clicks(@NonNull View view) {
return RxView.clicks(view).throttleFirst(1000, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread());
}
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者