RxJava系列之一 初識Rxjava
1.簡介
基礎知識
響應式程式碼的基本組成部分是Observables和Subscribers(事實上Observer才是最小的構建塊,但實踐中使用最多的是Subscriber,因為Subscriber才是和Observables的對應的。)。
Observable傳送訊息,而Subscriber則用於消費訊息。訊息的傳送是有固定模式的。Observable可以傳送任意數量的訊息(包括空訊息),
當訊息被成功處理或者出錯時,流程結束。Observable會呼叫它的每個Subscriber的Subscriber.onNext()函式,並最終以Subscriber.onComplete()或者Subscriber.onError()結束。
這看起來像標準的觀察者模式, 但不同的一個關鍵點是:Observables一般只有等到有Subscriber訂閱它,
才會開始傳送訊息(術語上講就是熱啟動Observable和冷啟動Observable。熱啟動Observable任何時候都會發送訊息,
即使沒有任何觀察者監聽它。冷啟動Observable只有在至少有一個訂閱者的時候才會傳送訊息(我的例子中都是隻有一個訂閱者)。這個區別對於開始學習RxJava來說並不重要。)。
換句話說,如果沒有訂閱者觀察它,那麼將不會起什麼作用。
2.第一個Rxjava 程式
好了,想要在專案中使用rxjava, 只需要通過在gradle中新增如下:
compile’io.reactivex:rxjava:1.0.13’ 目前最新版本 (本人使用的是gradle,大家可以通過github檢視rxjava的其他部署)
先來寫個小例項:
(這裡只貼上了部分程式碼全部程式碼請看文章底部)通過RxJava給TextView 設定內容。(這裡只是做個演示,並沒什麼卵用)
先建立Observable
private Observable<String> cerateObserver() {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("第一個RxJava");
subscriber.onCompleted();
}
});
}
再建立一個 Subscriber
private Subscriber<String> createSubscriber() {
return new Subscriber<String>() {
@Override
public void onCompleted() {
Log.i(TAG, "on completed");
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "on error");
}
@Override
public void onNext(String s) {
Log.i(TAG, "next Value = " + s);
mTextView.setText(s);
}
};
}
//最後把他兩繫結一下。
observable.subscribe(subscriber);
OK,效果圖出來了。
為了列印那幾個字寫那麼多程式碼也是醉了。
好吧, 下面看看更簡潔的程式碼。
//下面的程式碼乍一看可能難以接受, 慢慢來
Observable.just("第二個RxjavaDemo").subscribe(new Action1<String>() {
@Override
public void call(String s) {
mTextView.setText(s);
}
});
從上面的程式碼中,我們用到了兩個新的東西
1. Observer的just 和 Action1
其實 Observer為我們提供了很多便捷的快速操作。而just的作用是隻傳送一次任務,然後結束。而Action我們可以理解為Subscriber的其中一個子部分。
比如: Subscriber裡有三個函式 onCompleted onError onNext我們可以把它們理解為三個Action
而Action1代表的是隻有一個引數, 類似推理: 會不會有Action2, Action3 等等呢, 等待著大家去發掘
當然,如果大家用的jdk是1.8 的話,可以通過lambdas表示式來優化程式碼:
Observable.just("第二個RxJavaDemo lambdas").subscribe(t -> mTextView.setText(t));
是不是瞬間感覺碉堡了。
好了,我們已經學會了just的用法。
其實 Observable提供了大量的Operators來簡化我們程式碼的寫法。
操作符的作用是在Observable和最終的Subscriber之間修改Observable發出的事件。
下面我們將介紹到:map操作符的簡單用法map操作符的作用就是將一個事件轉換成另一個事件。
舉個例子, 比如說: 伺服器現在返回了一段字串,我需要將字串重新拼接成新的字串,並載入資料。
這時,我們就可以通過map操作。
Observable.just(url).map(new Func1<String, String>() {
@Override
public String call(String s) {
return "http://www.baidu.com/" + s;
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
mTextView.setText(s);
}
});
//如果你有lamdba
Observable.just(url).map(f -> "http://www.baidu.com/" + f).subscribe(t -> mTextView.setText(t));
map操作符的特點是: 你傳遞一個Observable物件給他, 他返回你一個Observable物件, 但是不需要對應Observable的返回型別。下一節我們將詳細的介紹map的操作,並且順帶著會通過RxJava的衍伸版RxAndroid來寫一個最簡單的網路請求。敬請期待。。。
(文章內容參考了官方,以及其他幾位大神的作品)
原始碼地址:點選進入
歡迎關注我的微信公眾號:androidesigner
通過微信掃描二維碼即可關注。