前言
Rxjava
,由于其基于事件流的鏈式調用、邏輯簡潔 & 使用簡單的特點,深受各大 Android
開發(fā)者的歡迎。
如果還不了解RxJava,請看文章:Android:這是一篇 清晰 & 易懂的Rxjava 入門教程
-
RxJava
如此受歡迎的原因,在于其提供了豐富 & 功能強大的操作符,幾乎能完成所有的功能需求 - 今天,我將為大家?guī)?
Rxjava
創(chuàng)建操作符的常見開發(fā)應用場景:聯(lián)想搜索優(yōu)化需求 ,并結合Retrofit
與RxJava
實現(xiàn),希望大家會喜歡。
Carson帶你學RxJava系列文章,包括 原理、操作符、應用場景、背壓等等,請關注看文章:Android:這是一份全面 & 詳細的RxJava學習指南
目錄
1. 需求場景
2. 功能說明
注:關于 Rxjava
中的debuounce()
操作符的使用請看文章:Android RxJava:過濾操作符 全面講解
3. 具體實現(xiàn)
- 布局文件:activity_filter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
// 用于輸入搜索的字符
<EditText
android:id="@+id/ed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="輸入搜索字段"
/>
// 用于顯示聯(lián)想搜索的結果
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
- 主文件:FilterUsage.java
// 控件綁定
EditText ed;
TextView tv;
ed = (EditText) findViewById(R.id.ed);
tv = (TextView) findViewById(R.id.tv);
/*
* 說明
* 1. 此處采用了RxBinding:RxTextView.textChanges(name) = 對對控件數(shù)據(jù)變更進行監(jiān)聽(功能類似TextWatcher),需要引入依賴:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
* 2. 傳入EditText控件,輸入字符時都會發(fā)送數(shù)據(jù)事件(此處不會馬上發(fā)送,因為使用了debounce())
* 3. 采用skip(1)原因:跳過 第1次請求 = 初始輸入框的空字符狀態(tài)
**/
RxTextView.textChanges(ed)
.debounce(1, TimeUnit.SECONDS).skip(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<CharSequence>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(CharSequence charSequence) {
tv.setText("發(fā)送給服務器的字符 = " + charSequence.toString());
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對Error事件作出響應" );
}
@Override
public void onComplete() {
Log.d(TAG, "對Complete事件作出響應");
}
});
- 測試結果
4. Demo地址
Carson_Ho的Github地址 = RxJava2實戰(zhàn)系列:聯(lián)想搜索優(yōu)化
5. 總結
- 本文主要講解了
Rxjava
的實際開發(fā)需求場景:聯(lián)想搜索優(yōu)化需求 - Carson帶你學RxJava系列文章:
入門
Carson帶你學Android:這是一篇清晰易懂的Rxjava入門教程
Carson帶你學Android:面向初學者的RxJava使用指南
Carson帶你學Android:RxJava2.0到底更新了什么?
原理
Carson帶你學Android:圖文解析RxJava原理
Carson帶你學Android:手把手帶你源碼分析RxJava
使用教程:操作符
Carson帶你學Android:RxJava操作符教程
Carson帶你學Android:RxJava創(chuàng)建操作符
Carson帶你學Android:RxJava功能性操作符
Carson帶你學Android:RxJava過濾操作符
Carson帶你學Android:RxJava組合/合并操作符
Carson帶你學Android:RxJava變換操作符
Carson帶你學Android:RxJava條件/布爾操作符
實戰(zhàn)
Carson帶你學Android:什么時候應該使用Rxjava?(開發(fā)場景匯總)
Carson帶你學Android:RxJava線程控制(含實例講解)
Carson帶你學Android:圖文詳解RxJava背壓策略
Carson帶你學Android:RxJava、Retrofit聯(lián)合使用匯總(含實例教程)
Carson帶你學Android:優(yōu)雅實現(xiàn)網絡請求嵌套回調
Carson帶你學Android:網絡請求輪詢(有條件)
Carson帶你學Android:網絡請求輪詢(無條件)
Carson帶你學Android:網絡請求出錯重連(結合Retrofit)
Carson帶你學Android:合并數(shù)據(jù)源
Carson帶你學Android:聯(lián)想搜索優(yōu)化
Carson帶你學Android:功能防抖
Carson帶你學Android:從磁盤/內存緩存中獲取緩存數(shù)據(jù)
Carson帶你學Android:聯(lián)合判斷
歡迎關注Carson_Ho的簡書
不定期分享關于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。