繼此tutorial 我想我會創建一個虛假的內存,磁盤,網絡對象,看看那裏的順序,如果一個失敗。我的目標是根據文章評論看看是否有人失敗它轉移到下一個:rxjava - 從concat使用concat不起作用的高速緩存
這種模式的關鍵是,concat()僅在需要時訂閱每個子Observable。如果數據被緩存,則不需要查詢較慢的源,因爲first()會盡早停止該序列。換句話說,如果內存返回結果,那麼我們就不會去打擾磁盤或網絡。相反,如果內存和磁盤都沒有數據,它會發出新的網絡請求。
i,那麼創建了以下測試:
Data disk=new Data();
disk.setAddress("38 Oriole");
disk.setPostalCode("mc72l9");
disk.setDate("feb 12");
Data network=new Data();
network.setAddress("39 skyway");
network.setPostalCode("mt82l9");
network.setDate("feb 13");
Observable observerMemory = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(final Subscriber subscriber) {
subscriber.onNext(null);
}}
);
Observable<Data> observerDisk = Observable.from(disk);
Observable<Data> observerNetwork = Observable.from(network);
Observable.concat(observerMemory, observerDisk, observerNetwork).first().subscribe(new Subscriber<Data>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
System.out.println("****" + e);
}
@Override
public void onNext(Data data) {
System.out.println(data.toString());
}
});
但是,在運行該測試時我期待它打印在盤可觀察到的(流)。所以輸出應該是38奧利奧爾等等,因爲第一個觀測值返回null,如果我認爲失敗,concat應該得到下一個流。我的意思是根據文章,如果一個流失敗,如內存流,然後concat應該去到下一個流是磁盤。但對我而言,它沒有這樣的事情。排放停止在null的第一個誤差。我究竟做錯了什麼。我正在做這個假測試,以確保這種方式工作之前,我繼續使用反應式編程一個真正的緩存系統。
這裏的方法是使用rxjava依賴IM:
compile 'com.netflix.rxjava:rxjava-android:0.20.7'
優秀。現在它按預期工作,我明白了爲什麼我們使用first()。謝謝 。 – j2emanue