Android RxJava1 入門教程

添加依賴(注意是rxjava1 不是rxjava2 >鹾DɑΑ)

compile 'io.reactivex:rxjava:1.3.0'
compile 'io.reactivex:rxandroid:1.2.1'

一纵菌。 基本使用

  1. 首先新建被觀察者
//被觀察者
        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("this is a message 1");//發(fā)送第一條信息
                subscriber.onNext("this is a message 2");//發(fā)送第二條信息
                subscriber.onCompleted();//發(fā)送完成
            }
        });
  1. 訂閱者
 Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                //全部接受完回調(diào)
                Log.i(TAG, "onCompleted: ");
            }

            @Override
            public void onError(Throwable e) {
                //錯誤的回調(diào)
                Log.i(TAG, "onError: " + e.getMessage());
            }

            @Override
            public void onNext(String o) {
                //接受單條數(shù)據(jù)
                Log.i(TAG, "onNext: " + o);
                Toast.makeText(MainActivity.this, o, Toast.LENGTH_SHORT).show();
            }
        };

3.訂閱關(guān)系

//訂閱關(guān)系
        observable.subscribe(subscriber);//添加訂閱者

運行下(上面全部放到activity oncreate方法中就行了)洋闽,這就是最基本的使用了玄柠,是不是很簡單呢

二:耗時操作,RxJava本來就是處理異步的 而且特別簡單

添加耗時操作诫舅,上面 被觀察者代碼中 增加就行

try {
    Thread.sleep(9000);//模擬耗時操作羽利,網(wǎng)絡(luò)請求
} catch (InterruptedException e) {
    e.printStackTrace();
}
subscriber.onNext("this is a message 1");
subscriber.onNext("this is a message 2");
subscriber.onCompleted();

現(xiàn)在直接運行肯定會ANR的。刊懈。
很簡單 铐伴,只需要修改下訂閱關(guān)系:

observable.subscribeOn(Schedulers.io())//訂閱者運行在子線程
        .observeOn(AndroidSchedulers.mainThread())//Toast回到主線程
        .subscribe(subscriber);

怎么樣?是不是不需要Handler發(fā)過來發(fā)過去了俏讹。当宴。。

這是最原始的用法泽疆,下面開始精簡用法
三户矢。 精簡使用

針對上面第一個的簡單實現(xiàn)

String[] values = {"this is a message 1", "this is a message 2"};//定義一個數(shù)組
Observable.from(values)
         .subscribe(new Subscriber<String>() {
             @Override
             public void onCompleted() {}

             @Override
             public void onError(Throwable e) {}

             @Override
             public void onNext(String s) {
                 Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
             }
          });

當(dāng)然,還可以更簡單

 String[] values = {"this is a message 1", "this is a message 2", "this is a message 3"};
 Observable.from(values)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
                    }
                });

怎么殉疼?還不夠簡潔梯浪,再來!

String[] values = {"this is a message 1", "this is a message 2", "this is a message 3"};
Observable.from(values)
        .subscribe(s -> Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show());//lambda表達(dá)式形式

這已經(jīng)是最簡單了瓢娜。挂洛。。
關(guān)于lambda語法眠砾,自己看下吧 特備簡單虏劲,就是一些縮寫而已,
AS需要配置 :https://github.com/evant/gradle-retrolambda

最后附一個 過濾非偶數(shù)褒颈,并乘以2柒巫,轉(zhuǎn)換成String類型,輸出的例子(lambda語法形式)

Integer[] values = {1, 3, 4, 7, 8};
Observable.from(values)
        .filter(integer -> integer % 2 == 0)//過濾非偶數(shù)
        .scan((integer, integer2) -> integer2 * 2)//函數(shù)*2
        .map(value -> value + "")//轉(zhuǎn)換string格式
        .subscribeOn(Schedulers.io())//調(diào)度器分配線程
        .observeOn(AndroidSchedulers.mainThread())//回到主線程
        .subscribe(s -> Log.i(TAG, "test:--- " + s));//打印日志

................................END...............................

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谷丸,一起剝皮案震驚了整個濱河市堡掏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刨疼,老刑警劉巖泉唁,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹅龄,死亡現(xiàn)場離奇詭異,居然都是意外死亡亭畜,警方通過查閱死者的電腦和手機(jī)扮休,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贱案,“玉大人肛炮,你說我怎么就攤上這事”ψ伲” “怎么了侨糟?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘩燥。 經(jīng)常有香客問我秕重,道長,這世上最難降的妖魔是什么厉膀? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任溶耘,我火速辦了婚禮,結(jié)果婚禮上服鹅,老公的妹妹穿的比我還像新娘凳兵。我一直安慰自己,他們只是感情好企软,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布庐扫。 她就那樣靜靜地躺著,像睡著了一般仗哨。 火紅的嫁衣襯著肌膚如雪形庭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天厌漂,我揣著相機(jī)與錄音萨醒,去河邊找鬼。 笑死苇倡,一個胖子當(dāng)著我的面吹牛富纸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雏节,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胜嗓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钩乍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怔锌,失蹤者是張志新(化名)和其女友劉穎寥粹,沒想到半個月后变过,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡涝涤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年媚狰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阔拳。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡崭孤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糊肠,到底是詐尸還是另有隱情辨宠,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布货裹,位于F島的核電站嗤形,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弧圆。R本人自食惡果不足惜赋兵,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搔预。 院中可真熱鬧霹期,春花似錦、人聲如沸拯田。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勿锅。三九已至帕膜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溢十,已是汗流浹背垮刹。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留张弛,地道東北人荒典。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吞鸭,于是被迫代替她去往敵國和親寺董。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容