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

您的位置:首頁技術(shù)文章
文章詳情頁

Android Retrofit框架的使用

瀏覽:136日期:2022-09-20 11:31:23
Retrofit介紹

Retrofit是Square開源的一款基于OkHttp(也是他家的)封裝的網(wǎng)絡(luò)請求框架,主要的網(wǎng)絡(luò)請求還是OkHttp來完成,Retrofit只是對OkHttp進行了封裝,可以讓我們更加簡單方便的使用,目前大部分公司都在使用這款框架,Retrofit的原理也是面試必問的問題之一了,所以我們不僅要會使用,也要對其實現(xiàn)原理有一個大概的了解。

本片文章從使用角度來說,不對的地方希望大家在評論區(qū)交流,我會及時改進,共同進步,文章中的demo可以從github下載。

Retrofit優(yōu)點

Retrofit的大部分配置是通過注解來實現(xiàn)的,配置簡單,使用方便;支持多種返回類型包括RxJava和協(xié)程,可以配置不同的解析器來進行數(shù)據(jù)解析,如Json,xml等

Retrofit的使用

以下代碼全部為Kotlin語言編寫,畢竟現(xiàn)在Kotlin也是大勢所趨了。

1.引入依賴項

github地址:github.com/square/retr…

implementation ’com.squareup.retrofit2:retrofit:2.9.0’//支持Gson解析json數(shù)據(jù)implementation ’com.squareup.retrofit2:converter-gson:2.9.0’//支持RxJava返回類型implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'//支持協(xié)程,Retrofit2.6.0及以上版本不需要引入,Retrofit內(nèi)置已經(jīng)支持//implementation ’com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2’2.添加網(wǎng)絡(luò)權(quán)限

<uses-permission android:name='android.permission.INTERNET'/>3.編寫Retrofit輔助類

首先定義一個RetrofitHelper輔助類,編寫Retrofit單例,Retrofit內(nèi)部已經(jīng)維護了線程池做網(wǎng)絡(luò)請求,不需要創(chuàng)建多個

注:BASE_URL必須為 '/' 結(jié)尾

object RetrofitHelper { //baseUrl根據(jù)自己項目修改 private const val BASE_URL = 'https://www.baidu.com' private var retrofit: Retrofit? = null private var retrofitBuilder: Retrofit.Builder? = null //Retrofit初始化 fun init(){ if (retrofitBuilder == null) { val client = OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .writeTimeout(20, TimeUnit.SECONDS) .build() retrofitBuilder = Retrofit.Builder() .baseUrl(BASE_URL) //支持Json數(shù)據(jù)解析 .addConverterFactory(GsonConverterFactory.create()) //支持RxJava返回類型 .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(client) } retrofit = retrofitBuilder!!.build() } fun getRetrofit():Retrofit{ if (retrofit == null) { throw IllegalAccessException('Retrofit is not initialized!') } return retrofit!! }}

然后再Application中進行初始化

class App:Application() { override fun onCreate() { super.onCreate() RetrofitHelper.init() }}

在Manifest文件中指定Application

<application android:name='.App' android:allowBackup='true' android:icon='@mipmap/ic_launcher' android:label='@string/app_name' android:roundIcon='@mipmap/ic_launcher_round' android:supportsRtl='true' android:networkSecurityConfig='@xml/network_security_config' android:theme='@style/Theme.RetrofitDemo'> <activity android:name='.MainActivity'> <intent-filter> <action android:name='android.intent.action.MAIN' /> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity></application>

Android P系統(tǒng)限制了明文流量的網(wǎng)絡(luò)請求 解決的辦法有2種 1.把所有的http請求全部改為https請求 2.在res的xml目錄(),然后創(chuàng)建一個名為:network_security_config.xml文件

<?xml version='1.0' encoding='utf-8'?><network-security-config><base-config cleartextTrafficPermitted='true' /></network-security-config>4.定義ApiService

首先我們先用一個最簡單的GET請求來試一下,這個接口是請求天氣情況的,免費的

interface Api { @GET('http://www.weather.com.cn/data/sk/{cityCode}.html') fun getWeather(@Path('cityCode')code:String):Observable<WeatherInfo>}

定義返回類型,為了方便打印,用的data class 類型

data class WeatherInfo( var weatherinfo:Info?=null) { data class Info( var city:String?, var cityid:String?, var temp:String?, var WD:String?, var WS:String?, var SD:String?, var AP:String?, var njd:String?, var WSE:String?, var time:String?)}

首先用@GET注解表示該借口為get請求,GET注解的value為請求地址,完整的請求地址為baseUrl+value,如value為完整地址,則會使用value為請求地址,一般通用情況下baseUrl = 'www.weather.com.cn/', 然后GET('data/sk/{cityCode}.html') @Path是網(wǎng)址中的參數(shù),用來替換。

5.實現(xiàn)接口方法

5.1RxJava方法實現(xiàn)

class RetrofitViewModel:ViewModel() { private val disposables:CompositeDisposable by lazy { CompositeDisposable() } fun addDisposable(d:Disposable){ disposables.add(d) } val weatherLiveData = MutableLiveData<WeatherInfo>() fun getWeather(){ RetrofitHelper.getRetrofit().create(Api::class.java).getWeather('101010100') .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object :Observer<WeatherInfo>{ override fun onComplete() {} override fun onSubscribe(d: Disposable) { addDisposable(d) } override fun onNext(t: WeatherInfo) { weatherLiveData.value = t } override fun onError(e: Throwable) { } }) } override fun onCleared() { super.onCleared() disposables.clear() }}

這里是用ViewModel中做的操作,如果是MVP模式放在Presenter中進行就好,首先通過Retrofit單例調(diào)用Service的對象的getWeather方法,指定上下游事件的線程,創(chuàng)建觀察者對象進行監(jiān)聽,在onNext方法中拿到返回結(jié)果后回調(diào)給Activity,數(shù)據(jù)回調(diào)用的是LiveData,在Activity中操作如下

class MainActivity : AppCompatActivity() { private val viewModel by viewModels<RetrofitViewModel>() private var btnWeather: Button? = null private var tvWeather: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel.weatherLiveData.observe(this, Observer { tvWeather?.text = it.toString()) }) btnWeather = findViewById<Button>(R.id.btnWeather) tvWeather = findViewById(R.id.tvWeather) btnWeather?.setOnClickListener { viewModel.getWeather() } }}

在Activity中

1.創(chuàng)建ViewModel對象

2.注冊LiveData的回調(diào)

3.獲取天氣情況

如下圖所示

Android Retrofit框架的使用

github地址:github.com/ZhiLiangT/R…

以上就是Android Retrofit框架的使用的詳細內(nèi)容,更多關(guān)于Android Retrofit框架的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美日韩视频二区| 蜜桃视频免费观看一区| 欧美激情日韩| 免费成人av在线播放| 欧美有码在线| 免费日韩av片| 久久久久国产精品一区二区| 成人羞羞视频播放网站| 久久成人福利| 久久精品 人人爱| 蜜桃av在线播放| 午夜精品婷婷| 国内精品美女在线观看| 欧美日韩精品免费观看视频完整| 久久视频精品| 日本精品另类| 欧美xxxx中国| 美女视频黄免费的久久| 九一国产精品| 国产精品久久久久久久久久齐齐 | 亚洲一区资源| 久久精品九色| 日韩午夜在线| 欧美一区成人| 日韩av网站在线观看| 日韩欧美一区二区三区免费观看| 一级欧美视频| 色狠狠一区二区三区| 日韩久久电影| 黄色精品网站| 国产精品亚洲四区在线观看 | 精品在线91| 国产欧美一区二区三区精品观看 | 五月天激情综合网| 岛国精品一区| 日韩精品亚洲aⅴ在线影院| 日韩高清中文字幕一区| 欧美69视频| 国精品产品一区| 精品一区二区三区的国产在线观看| 黄色亚洲在线| 天堂√中文最新版在线| 久久精品国产网站| 日本在线观看不卡视频| 成人亚洲欧美| 欧美亚洲国产精品久久| 美日韩一区二区三区| 午夜国产精品视频| 日韩三区在线| 国产精品亚洲四区在线观看| 水蜜桃久久夜色精品一区的特点| 日韩精品视频在线看| 国产精品久久久久久久久久白浆 | 欧美福利专区| 国产精品久久久久久久久久齐齐| 视频一区视频二区中文| 国产精品99久久久久久董美香| 日韩一区精品视频| 99在线观看免费视频精品观看| 欧美一区二区三区久久| 国产美女高潮在线| 国产日韩欧美三级| 日韩深夜视频| 精品久久影院| 日韩一区精品视频| 欧美一级专区| 国产一区导航| 国产一区二区视频在线看| 国产日韩中文在线中文字幕| 99国产精品视频免费观看一公开 | 国产精品日韩精品中文字幕| 首页欧美精品中文字幕| 手机在线电影一区| 国产精品v日韩精品v欧美精品网站| 成人亚洲一区二区| 国产精品亚洲综合久久| 欧美一区二区三区免费看| 欧美国产美女| 欧美精选视频一区二区| 在线手机中文字幕| 国产精品高清一区二区| 欧美黄色精品| 精品中文字幕一区二区三区四区| 午夜一级久久| 午夜电影亚洲| 久久亚洲黄色| 国产毛片精品| 国产精久久一区二区| 六月婷婷一区| 欧美.日韩.国产.一区.二区 | 亚洲人成毛片在线播放女女| 免费成人在线视频观看| 久久精品国产久精国产| 国产成人精品三级高清久久91 | 国产拍在线视频| 国产成人免费精品| 日韩视频一区| 色偷偷色偷偷色偷偷在线视频| 亚洲黄色中文字幕| 日韩欧美在线精品| 国产精品一区二区99| av中文字幕在线观看第一页 | 免费在线欧美视频| 欧美日韩精品一本二本三本| 国产精品毛片久久| 99精品一区| 久久精品国产网站| 日韩免费看片| 国产精品13p| 国产欧美自拍| 国产精品99久久精品| 日韩精品电影| 97视频热人人精品免费| 久久精品高清| 日韩中文字幕高清在线观看| 亚洲尤物在线| 国产日韩专区| 国产精品极品国产中出| 成人在线视频免费| 欧美资源在线| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚州精品视频| 国产精品99精品一区二区三区∴| 欧美xxxx中国| 国产精品日本一区二区不卡视频 | 蜜臀久久99精品久久一区二区| 久久亚洲精品伦理| 国产精品tv| 麻豆成人综合网| 国内精品99| 亚洲高清二区| 蜜桃视频一区二区三区| 国产三级一区| 日本免费在线视频不卡一不卡二| 国产一区二区三区久久| 日韩国产精品久久久| 日本在线成人| 正在播放日韩精品| 精品网站999| 三级欧美韩日大片在线看| 久久国产视频网| 日本色综合中文字幕| www在线观看黄色| 欧美69视频| 欧美日韩国产在线一区| 国产九九精品| 日韩在线网址| 国产精品一区二区三区av麻| 久久久久免费av| 国产精品一级| 欧美精品九九| 国产免费久久| 国产一区二区三区四区| 99亚洲视频| 爽好久久久欧美精品| а√在线中文在线新版| aⅴ色国产欧美| 五月天久久777| 久久精品免费看| 女人天堂亚洲aⅴ在线观看| 激情欧美丁香| 日本va欧美va精品发布| 日本不卡高清| 91tv亚洲精品香蕉国产一区| 久久99久久人婷婷精品综合| 麻豆精品av| 噜噜噜躁狠狠躁狠狠精品视频| 免费观看在线色综合| 青青青免费在线视频| 欧美在线看片| 欧美精品成人| 日本不卡在线视频| 美腿丝袜亚洲一区| 视频一区二区中文字幕| 久久久久国产一区二区| 国产亚洲毛片| 国产欧美日韩在线观看视频| 激情自拍一区| 久热综合在线亚洲精品| 亚洲伊人av| 国产综合色区在线观看| 国产精品免费99久久久| 亚洲婷婷丁香| 免费一级欧美在线观看视频| 日韩一区二区三区精品| 成人看片网站| 天使萌一区二区三区免费观看| 国产日韩电影| 亚洲免费婷婷| 黑丝美女一区二区| 亚洲三级欧美| 激情久久久久久| 国产精品任我爽爆在线播放 | 亚洲欧美伊人| 国产人成精品一区二区三| 喷白浆一区二区| 国产精品极品| 国产伦精品一区二区三区视频| 亚洲专区一区| 91青青国产在线观看精品|