最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RxJava之網(wǎng)絡請求最常見的三種場景

 更新時間:2018年05月14日 09:39:15   作者:塞上牧羊空許約  
本文想闡述一下當你開發(fā)Android應用并采用RxJava作為你的架構(gòu),尤其是有關(guān)網(wǎng)絡請求時最常見的三種場景。這篇文章主要介紹了RxJava之網(wǎng)絡請求最常見的三種場景,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文想闡述一下當你開發(fā)Android應用并采用RxJava作為你的架構(gòu),尤其是有關(guān)網(wǎng)絡請求時最常見的三種場景。

我使用Retrofit來作為網(wǎng)絡層,簡單的內(nèi)存緩存-HashMap來做緩存,也可以使用Room或者其他數(shù)據(jù)庫實現(xiàn)來替代。
Retrofit接口有如下的一些簡單方法,它獲取一個事件列表。

@GET("events")
Single<List<Event>> getEventsFeed(...);

通過我的Repository接口來暴露,可訂閱如下:

Single<List<Event>> source =
  remoteRepository.getEventsFeed(...);
source
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> {
        // Do something with data e.g. pass it to a view.
      },
      throwable -> {
        // Handle error e.g. get view to show dialog.
      }
    );

下面的例子中,我們將會改變“源”的定義方式,其余代碼不變,這也是RxJava的優(yōu)點之一,可以將復雜的異步任務串連起來,但是執(zhí)行和觀察結(jié)果的代碼卻可以保持不變。

現(xiàn)在說一下開發(fā)一個基本或中等復雜應用時會遇到的三種情形。
1.從緩存或者網(wǎng)絡獲取數(shù)據(jù)
2.發(fā)起兩個請求,第二個請求依賴于第一個。
3.同時發(fā)起多個請求,并結(jié)合他們的結(jié)果。

從緩存或者網(wǎng)絡獲取數(shù)據(jù)

如果有緩存則從緩存中取值,否則從網(wǎng)絡獲取。

Maybe<List<Event>> source1 =
  cacheRepository.getEventsFeed(...);
Single<List<Event>> source2 =
  networkRepository.getEventsFeed(...);
Maybe<List<Event>> source = 
    Maybe.concat(source1, source2.toMaybe()).firstElement();

這里我們使用concat操作符將兩個observable連接在一起,然而firstElement意味著我們只關(guān)心第一個發(fā)射出來的值。所以如果緩存有值,這個值將會被發(fā)射并且調(diào)用onCompleted,此值即為返回值。網(wǎng)絡請求也將不會被調(diào)用,這也是我們所期待的。如果緩存沒有值,然后它便會調(diào)用onCompleted,此時也沒有發(fā)射任何一個值。因此網(wǎng)絡請求將會發(fā)生。使用MayBe暗示著觀察不到值的可能,例如,緩存為空且網(wǎng)絡也沒有返回結(jié)果。

發(fā)起兩個請求,第二個請求依賴于第一個

從網(wǎng)絡上取值并使用其部分結(jié)果發(fā)起另外一個網(wǎng)樓請求來獲取真正想要的數(shù)據(jù)。

Single<User> source1 =
  networkRepository.getMyProfile(...);
Single<List<Tweet>> source = source1.flatMap(user -> {
    return networkRepository.getUserTweets(user.getTwitterId());
  });

同時發(fā)起多個請求,并結(jié)合他們的結(jié)果。

我有三個網(wǎng)絡請求,它們互不依賴,我想同時執(zhí)行以提高響應時間。等到三個請求都結(jié)束后才發(fā)射值。

Single<List<Event>> source1 =
  networkRepository.getEventsFeed(...);
Single<List<Bookmark>> source2 =
  networkRepository.getBookmarks(...);
Single<Stats> source3 =
  networkRepository.getUserStats(...);

Single<MyViewModel> source =
  Single.zip(source1, source2, source3, MyViewModel::new);

這個例子中,我們使用zip操作符來合并這三個Observables.它們被結(jié)合為一個MyViewModel的POJO.其構(gòu)造參數(shù)與源Observables的類型匹配

public MyViewModel(List<Event>, List<Bookmark>, Stats) {...}

當你訂閱這個源Observable時,將會同時發(fā)起三個網(wǎng)絡請求,但是只有當它們都完成后才將新的MyViewModel實例發(fā)射出去。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android實現(xiàn)下載進度條效果

    Android實現(xiàn)下載進度條效果

    vivo商店在下載應用的時候,底部有一個圓角矩形的下載進度條,中間有一個進度文字,而且進度和文字交匯的時候,交匯部分的文字會從藍色邊為白色,會有一種一半白色字,一半藍色字的效果。本文將仿照該樣式實現(xiàn)一個
    2021-06-06
  • Kotlin?RecyclerView滾動控件詳解

    Kotlin?RecyclerView滾動控件詳解

    RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實現(xiàn)數(shù)據(jù)縱向滾動,也可以實現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法
    2022-12-12
  • Android基于BaseExpandableListAdapter實現(xiàn)的二級列表仿通話記錄功能詳解

    Android基于BaseExpandableListAdapter實現(xiàn)的二級列表仿通話記錄功能詳解

    這篇文章主要介紹了Android基于BaseExpandableListAdapter實現(xiàn)的二級列表仿通話記錄功能,結(jié)合具體實例形式分析了Android實現(xiàn)通話記錄功能的布局與功能相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • Android適配安卓6.0藍牙通訊實現(xiàn)過程

    Android適配安卓6.0藍牙通訊實現(xiàn)過程

    這篇文章主要為大家詳細介紹了Android適配安卓6.0藍牙通訊實現(xiàn)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android使用GridView實現(xiàn)日歷的方法

    Android使用GridView實現(xiàn)日歷的方法

    本篇文章主要介紹了Android使用GridView實現(xiàn)日歷的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Adnroid打造通用的帶進度條的WebView

    Adnroid打造通用的帶進度條的WebView

    這篇文章主要為大家詳細介紹了Adnroid打造通用的帶進度條的WebView的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android控件RecyclerView實現(xiàn)混排效果仿網(wǎng)易云音樂

    Android控件RecyclerView實現(xiàn)混排效果仿網(wǎng)易云音樂

    這篇文章主要為大家詳細介紹了Android控件RecyclerView實現(xiàn)混排效果,仿網(wǎng)易云音樂,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android通過Webservice操作sqlserver數(shù)據(jù)庫實例代碼

    Android通過Webservice操作sqlserver數(shù)據(jù)庫實例代碼

    這篇文章主要介紹了Android通過Webservice操作sqlserver數(shù)據(jù)庫的相關(guān)知識,對webservice操作數(shù)據(jù)庫相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • android實現(xiàn)滾動文本效果

    android實現(xiàn)滾動文本效果

    這篇文章主要為大家詳細介紹了android實現(xiàn)滾動文本效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android 解決使用SearchView時軟鍵盤不支持actionSearch的問題

    Android 解決使用SearchView時軟鍵盤不支持actionSearch的問題

    本文主要介紹使用SearchView時軟鍵盤不支持actionSearch,這里提供了解決方案,希望能幫助開發(fā)Android應用的同學
    2016-07-07

最新評論

府谷县| 霍邱县| 云安县| 云浮市| 高要市| 黄陵县| 栾城县| 焉耆| 玉林市| 无极县| 金秀| 博客| 银川市| 府谷县| 当雄县| 察隅县| 犍为县| 绵竹市| 衡南县| 花垣县| 海南省| 公主岭市| 泽州县| 沾益县| 梁山县| 定州市| 牟定县| 周宁县| 西乌| 九龙县| 缙云县| 荃湾区| 三门县| 黄陵县| 丹江口市| 镇赉县| 同仁县| 仪征市| 师宗县| 阿拉善右旗| 运城市|