日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Android項目多服務端接口適配(超簡單)

瀏覽:123日期:2022-09-23 08:40:33

現狀

Android項目如果是多服務端接口時,一般怎么弄呢?

方法1:服務器地址放在Header中

把服務器地址放在接口Header中,然后通過攔截器來動態修改請求地址而實現的。除了默認服務器的接口,其它都要加一個Header,有點麻煩。看起來也不爽,不簡潔。

interface ApiHeaderCase { /************************** server A ****************************/ @Headers('host:$SERVER_HOST_A') @GET('user/loginWithScanCode') fun aMethod1(@Query('id') id: Int): Observable<ResponseBody> /************************** server B ****************************/ @Headers('host:$SERVER_HOST_B') @GET('user/loginWithScanCode') fun bMethod1(@Query('id') id: Int): Observable<ResponseBody>}

方法2:多套服務類,實例化為多個對象,準確查找接口歸屬服務

定義多個類,每個類定義一套服務接口。然后分別實例化為多個對象,再使用準確的對象來調用接口。這種方法運行效率是最高的,但是在開發時,可能無法快速知道接口歸屬與哪個服務,需要查看代碼才能準確知曉,可以說是少了代碼提示能力。

interface ApiA { @GET('user/loginWithScanCode') fun methodA(@Query('id') id: Int): Observable<ResponseBody>}interface ApiB { @GET('user/loginWithScanCode') fun methodB(@Query('id') id: Int): Observable<ResponseBody>}

方法3:全寫在一起,實例化為多個對象,準確調用方法

把所有接口都寫在一個類中,然后根據服務地址分別實例化為多個對象。再準確調用方法,為了保證準確調用方法,可以給每個接口加個服務名的前綴,以減少方法調錯的問題。

interface ApiAllInOne { /************************** server A ****************************/ @GET('user/loginWithScanCode') fun aMethod1(@Query('id') id: Int): Observable<ResponseBody> /************************** server B ****************************/ @GET('user/loginWithScanCode') fun bMethod1(@Query('id') id: Int): Observable<ResponseBody>}const val SERVER_HOST_A = 'https://www.a.com/'const val SERVER_HOST_B = 'https://www.b.com/'fun getApi(retrofit: Retrofit, host: String): ApiAllInOne { return retrofit.newBuilder() .baseUrl(host).build() .create(ApiAllInOne::class.java)}fun showNomalUseCase(retrofit: Retrofit) { val apiA = getApi(retrofit, SERVER_HOST_A)//save as single instance for repeated usage apiA.aMethod1(1).subscribe() apiA.bMethod1(1).subscribe()//invalid usage, but no compile error val apiB = getApi(retrofit, SERVER_HOST_B) apiB.bMethod1(1).subscribe() apiB.aMethod1(1).subscribe()//invalid usage, but no compile error}

有更簡單的方法嗎?

當然有了,而且超方便!

定義接口

(建議)在一個KT文件中定義所有接口,方便查找和維護。

interface ApiHolder : ApiA, ApiB @BaseUrl('https://www.a.com/') interface ApiA { @GET('user/loginWithScanCode') fun methodA(@Query('id') id: Int): Observable<ResponseBody> } @BaseUrl('https://www.b.com/') interface ApiB { @GET('user/loginWithScanCode') fun methodB(@Query('id') id: Int): Observable<ResponseBody> }

建工具類

一般都需要個工具類的,方便配置攔截器等。如果沒有自定義的需求,也可以直接實例化來用。

可以重寫invokeApi方法,全局給每個Observable設定線程。

class ApiUtil : ApiHolderUtil<ApiHolder>(ApiHolder::class) { companion object { val apiUtil = ApiUtil() val api = apiUtil.api } override fun invokeApi(api: Any, method: Method, args: Array<*>?): Any { val observable = super.invokeApi(api, method, args) as Observable<*> return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) }}

動態更新服務地址

還可以動態更新服務地址,比如實現測試服務和正式服務間切換。

//update api baseUrl when needed apiUtil.updateApi(ApiA::class, https://www.a2.com/)

調用接口

api.methodA(1).subscribe() api.methodB(1).subscribe()

引入依賴

dependencies { implementation ’com.github.DonaldDu:ApiHolder:x.x.x’//JitPack version}

該項目使用的三方庫

OkHttp3 Retrofit2 rxjava3(可以修改為rxjava2)

api ’com.squareup.okhttp3:okhttp:4.7.2’ api 'com.squareup.retrofit2:retrofit:2.9.0' api 'com.squareup.retrofit2:converter-gson:2.9.0' api 'com.squareup.retrofit2:adapter-rxjava3:2.9.0' api ’io.reactivex.rxjava3:rxandroid:3.0.0’

其它說明

rxjava3 ->rxjava2

可以根據需要調整為rxjava2,建議用最新的。

//重寫ApiHolderUtil如下方法,RxJava3CallAdapterFactory ->RxJava2CallAdapterFactory即可。 protected open fun getRetrofit(client: OkHttpClient): Retrofit { return Retrofit.Builder().validateEagerly(validateEagerly).addConverterFactory(getGsonConverterFactory()).addCallAdapterFactory(RxJava3CallAdapterFactory.create()).baseUrl('http://www.demo.com/').client(client).build() }

Timeout

可以給每套服務設置不同的超時

@BaseUrl('https://www.b.com/')@Timeout(read = 100, timeUnit = TimeUnit.SECONDS)interface ApiB { @GET('user/loginWithScanCode') fun methodB(@Query('id') id: Int): Observable<ResponseBody>}

到此這篇關于詳解Android項目多服務端接口適配(超簡單)的文章就介紹到這了,更多相關Android多服務端接口適配 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区天码| 性色一区二区| 久久国产人妖系列| 日韩精品欧美精品| 日本不卡一区二区三区| 天堂av一区| 日韩超碰人人爽人人做人人添| 亚洲精品欧美| 91亚洲无吗| 麻豆成人91精品二区三区| 精品网站999| 不卡福利视频| 免费av一区| 国产精品激情| 久久精品国产99国产| 日本蜜桃在线观看视频| 成午夜精品一区二区三区软件| 国产网站在线| 一区二区三区四区在线看| 欧美日韩国产一区精品一区| 亚洲精品国产偷自在线观看| 一区二区国产在线观看| 欧美三级第一页| 国产精品久久久久久妇女| 黄色精品视频| 亚洲午夜在线| 亚洲精品少妇| 欧美精品1区| 久久久夜精品| 亚洲aa在线| 老司机精品视频网| 久久精品国产99国产精品| caoporn视频在线| 激情婷婷欧美| 日韩精品视频网站| 国产不卡精品| 国产亚洲一区在线| 国产精品扒开腿做爽爽爽软件| 色爱综合网欧美| 亚洲综合丁香| 国产精品成人3p一区二区三区| 亚洲精品在线影院| 综合一区av| 91综合视频| 亚洲日本免费电影| 美女视频黄 久久| 久久激情一区| 日本99精品| 天堂网av成人| 青青青国产精品| 免费在线小视频| 午夜久久av| 香蕉成人av| 欧美日韩xxxx| 免费成人网www| 国产精品视频3p| 免费久久精品| 麻豆精品蜜桃视频网站| 亚洲欧美日韩高清在线| 国产欧美88| 99亚洲视频| 国产精品一卡| 91精品国产成人观看| 最新亚洲国产| 欧美日韩亚洲一区三区| 日韩手机在线| 麻豆成人av在线| 免费精品国产的网站免费观看| 亚洲精品高潮| 精品国产一区二区三区噜噜噜| 成人va天堂| 日本aⅴ精品一区二区三区 | 91p九色成人| 麻豆一区二区三区| 亚洲精品.com| 国产午夜久久av| 国产午夜久久| 日韩另类视频| 国产精品对白久久久久粗| 亚洲精品123区| 成人美女视频| 国产精品115| 中文字幕日韩高清在线| 久久一区二区中文字幕| 久久久久久亚洲精品美女| 一区二区三区国产在线| 蜜臀久久久久久久| 国产在线日韩精品| 婷婷成人av| 欧美色图国产精品| 国产一区二区三区日韩精品 | 亚洲欧洲日本mm| 日韩国产在线| 国产精品久久免费视频| 美美哒免费高清在线观看视频一区二区| 日本在线高清| 久久免费影院| 国产精品一区二区三区www| 亚洲精品麻豆| 日韩精品一卡二卡三卡四卡无卡| 91精品精品| 亚洲精品福利电影| 麻豆精品一区二区综合av| 奇米色欧美一区二区三区| 中文一区一区三区免费在线观 | 日韩精品亚洲专区| 免费在线看一区| 欧美日韩国产综合网| 欧美性感美女一区二区| 蜜桃视频在线网站| 伊人久久视频| 毛片在线网站| 精品精品99| 蜜桃久久久久| 国产精品视频一区二区三区| 日韩精品一区二区三区中文 | 麻豆成人av在线| 麻豆精品在线| 精品视频一二| 国产精品久久久久蜜臀| 国产一区不卡| 日韩av自拍| 视频二区不卡| 成人免费电影网址| 久久国产影院| 色网在线免费观看| 99久久99久久精品国产片果冰| 久草免费在线视频| 日韩和的一区二在线| 欧美日韩色图| 国产午夜精品一区二区三区欧美 | 中文无码日韩欧| 日韩精品一区二区三区中文在线 | 91亚洲国产| 亚洲成人av观看| 激情婷婷久久| 噜噜噜久久亚洲精品国产品小说| 视频一区二区三区在线| 在线精品亚洲| 久久国产免费看| 久久精品三级| 欧美不卡高清一区二区三区| 久久伦理在线| 视频一区国产视频| 蜜桃视频在线观看一区二区| 日本成人精品| 国产精品99久久免费观看| 91麻豆国产自产在线观看亚洲| 成人av三级| 国产模特精品视频久久久久| 视频精品一区| 国产精品啊v在线| 极品av在线| 亚洲视频www| 国产欧美在线| 日韩欧美二区| 丝袜美腿亚洲一区二区图片| 日韩va欧美va亚洲va久久| 美女视频一区在线观看| 国产成人精品一区二区免费看京| 久久国产小视频| 亚洲精品进入| 91日韩免费| 爽好久久久欧美精品| 国产精品毛片aⅴ一区二区三区| 色偷偷偷在线视频播放| 免费日韩一区二区| 国产精品啊啊啊| 激情婷婷综合| 国产欧美日韩一区二区三区在线| 在线天堂资源www在线污| 亚洲资源av| 久久伊人国产| 中文精品在线| 欧美日韩xxxx| 欧美不卡高清| 国产精品最新自拍| 久久久久久久久久久妇女| 亚洲精品无吗| 97精品国产一区二区三区| 视频一区在线视频| 精品久久网站| 蜜桃视频一区二区| 国产精选在线| 蜜臀久久久99精品久久久久久| 精品三级在线观看视频| 日韩亚洲在线| 久久99高清| 亚洲精品乱码久久久久久蜜桃麻豆| 久久亚洲精精品中文字幕| 欧美精品自拍| 精品三级久久久| 亚洲色图综合| 久久久久国产精品一区二区| 日韩不卡一区二区| 欧美一级精品| 国产高清视频一区二区| 91久久亚洲| 91亚洲人成网污www| 日韩精品国产欧美|