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

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

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

瀏覽:127日期: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久久,三上悠亚国产精品一区二区三区
国产精品草草| 国产三级一区| 欧美精品日日操| 狠狠久久伊人| 久久三级中文| 国产一区二区三区探花| 国产激情在线播放| 日韩大片在线观看| 精品久久电影| 精品久久久久中文字幕小说| 成人亚洲精品| 人人香蕉久久| 在线成人直播| 亚洲精品99| 一区二区视频欧美| 亚洲欧美日韩专区| 中文字幕日韩亚洲| 久久狠狠久久| 国产一区二区三区四区| 亚洲最新无码中文字幕久久 | 亚洲精华国产欧美| 日本 国产 欧美色综合| 在线看片日韩| 国产欧美二区| 日韩av在线播放网址| 久久精品主播| 麻豆亚洲精品| 国产欧美一区二区三区精品观看 | 福利一区视频| 国产麻豆久久| 狠狠干综合网| 日本视频在线一区| 国产精品第一国产精品| 国产精品乱战久久久| www在线观看黄色| 亚洲欧美一区在线| 四虎成人精品一区二区免费网站| 国产精品视频一区视频二区| yellow在线观看网址| 亚洲欧美网站| 免费观看亚洲天堂| 欧美日韩一区二区三区视频播放| 日韩在线观看一区二区| 国产欧美一区二区三区精品观看| 蜜桃视频在线网站| 久久高清一区| 国产精品18| 日韩欧美一区二区三区免费看| 激情欧美日韩一区| 日韩avvvv在线播放| 欧美日韩免费观看视频| 久热精品在线| 精品国产一区二区三区av片| 欧美日韩激情| 国产精品一区免费在线| 亚洲香蕉网站| 国产日韩欧美| 亚洲天堂黄色| 国产精品手机在线播放| 亚洲电影在线一区二区三区| 91麻豆精品激情在线观看最新| 日韩伦理一区| 日韩欧美美女在线观看| 成人亚洲精品| 中文字幕亚洲精品乱码| 丁香六月综合| 欧美日韩一区二区三区不卡视频 | 欧美亚洲福利| 欧美日韩精品免费观看视频完整| 国产精品三p一区二区| 亚洲国内欧美| 老司机精品视频在线播放| 亚洲欧美成人综合| 麻豆精品蜜桃视频网站| 亚洲欧美日韩精品一区二区| 桃色av一区二区| 欧美久久香蕉| 日本 国产 欧美色综合| 亚洲成人av观看| 国产精品久久久一区二区| 亚洲综合不卡| 亚洲天堂黄色| 日本免费一区二区三区四区| 国产精品一区二区三区www| 9久re热视频在线精品| аⅴ资源天堂资源库在线| 97精品国产99久久久久久免费| 国产韩日影视精品| 久久精品资源| 日韩av影院| 国产精品嫩草99av在线| 国产在线|日韩| 黄色欧美在线| 你懂的亚洲视频| 人人精品久久| 视频一区视频二区中文字幕| 欧美日韩在线网站| 成人日韩在线| 成人在线视频免费看| 国产精品中文字幕亚洲欧美| 中文字幕日本一区| 99国产一区| 婷婷综合在线| 久久久一二三| 韩国三级一区| 麻豆91小视频| 麻豆精品国产91久久久久久| 日韩va欧美va亚洲va久久| 亚洲天堂日韩在线| 国产农村妇女精品一二区| 欧美丝袜一区| 久久精品导航| 欧美丝袜一区| 99久久婷婷| 久久高清免费| 久久精品中文| 色网在线免费观看| 欧美日韩在线观看首页| 亚洲伊人av| 久久激情一区| 欧美亚洲国产激情| 亚洲午夜电影| 欧美在线网站| 中文亚洲免费| 丝袜脚交一区二区| 麻豆9191精品国产| 中文字幕成人| 亚洲欧洲免费| 日韩一区二区三免费高清在线观看 | 国产精品二区不卡| 国内精品伊人| 不卡一二三区| 亚洲成人va| 九一精品国产| 国产精品美女| 亚洲欧洲美洲国产香蕉| 日本三级亚洲精品| 欧美aaaaaa午夜精品| 欧美精品aa| 国产精品亚洲欧美日韩一区在线| 国产精品久久久久久久免费软件| 蜜桃精品视频| 欧美片第1页| 午夜国产欧美理论在线播放| 视频一区欧美日韩| 91大神在线观看线路一区| 欧美激情日韩| 日韩综合精品| 丝瓜av网站精品一区二区| 日韩精品免费一区二区夜夜嗨| 国产乱子精品一区二区在线观看| 国产精品成人**免费视频| 97精品97| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲不卡av不卡一区二区| 亚洲小说欧美另类婷婷| 亚洲一二av| 另类小说一区二区三区| 少妇精品导航| 六月丁香综合| 国产日韩欧美三级| 国产精品国产三级国产在线观看| 99热国内精品| 亚洲精品视频一二三区| 国产欧美日韩一级| 日韩中文字幕在线一区| 美女视频黄久久| 免费av一区二区三区四区| 亚洲深深色噜噜狠狠爱网站 | 日韩综合一区二区| 精品视频国内| 最新亚洲一区| 欧美午夜三级| 日韩精品免费一区二区三区| 蜜桃久久av| 久久99精品久久久野外观看| 美女网站一区| 欧美精品影院| 久久久久久美女精品| 日韩欧美在线精品| 日韩欧美网址| 日韩国产欧美一区二区三区| 精品日产乱码久久久久久仙踪林| 欧美搞黄网站| 国产精品xxx| 不卡中文字幕| 欧美国产日韩电影| 国产一级一区二区| 国产一区二区三区不卡av| 在线亚洲一区| 国产一区二区三区国产精品| 免费成人性网站| 高清一区二区三区av| 日韩精品一区二区三区免费视频 | 99国产精品久久久久久久| 精品黄色一级片| 麻豆亚洲精品| 亚洲女同av| 久久国产三级| 亚洲一区二区三区四区五区午夜|