Android|Android Retrofit框架的使用
目录
- Retrofit介绍
- Retrofit优点
- Retrofit的使用
- 1.引入依赖项
- 2.添加网络权限
- 3.编写Retrofit辅助类
- 4.定义ApiService
- 5.实现接口方法
Retrofit介绍
Retrofit是Square开源的一款基于OkHttp(也是他家的)封装的网络请求框架,主要的网络请求还是OkHttp来完成,Retrofit只是对OkHttp进行了封装,可以让我们更加简单方便的使用,目前大部分公司都在使用这款框架,Retrofit的原理也是面试必问的问题之一了,所以我们不仅要会使用,也要对其实现原理有一个大概的了解。
本片文章从使用角度来说,不对的地方希望大家在评论区交流,我会及时改进,共同进步,文章中的demo可以从github下载。
Retrofit优点
Retrofit的大部分配置是通过注解来实现的,配置简单,使用方便;支持多种返回类型包括RxJava和协程,可以配置不同的解析器来进行数据解析,如Json,xml等
Retrofit的使用
以下代码全部为Kotlin语言编写,毕竟现在Kotlin也是大势所趋了。
1.引入依赖项
github地址:github.com/square/retr…
implementation 'com.squareup.retrofit2:retrofit:2.9.0'//支持Gson解析json数据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"//支持协程,Retrofit2.6.0及以上版本不需要引入,Retrofit内置已经支持//implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
2.添加网络权限
3.编写Retrofit辅助类
首先定义一个RetrofitHelper辅助类,编写Retrofit单例,Retrofit内部已经维护了线程池做网络请求,不需要创建多个
注:BASE_URL必须为 "/" 结尾
object RetrofitHelper { //baseUrl根据自己项目修改 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数据解析.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
Android P系统限制了明文流量的网络请求 解决的办法有2种 1.把所有的http请求全部改为https请求 2.在res的xml目录(),然后创建一个名为:network_security_config.xml文件
4.定义ApiService
【Android|Android Retrofit框架的使用】首先我们先用一个最简单的GET请求来试一下,这个接口是请求天气情况的,免费的
interface Api { @GET("http://www.weather.com.cn/data/sk/{cityCode}.html") fun getWeather(@Path("cityCode")code:String):Observable}
定义返回类型,为了方便打印,用的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是网址中的参数,用来替换。
5.实现接口方法
5.1RxJava方法实现
class RetrofitViewModel:ViewModel() { private val disposables:CompositeDisposable by lazy {CompositeDisposable() } fun addDisposable(d:Disposable){disposables.add(d) } val weatherLiveData = https://www.it610.com/article/MutableLiveData() fun getWeather(){RetrofitHelper.getRetrofit().create(Api::class.java).getWeather("101010100").subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object :Observer {override fun onComplete() {}override fun onSubscribe(d: Disposable) {addDisposable(d)}override fun onNext(t: WeatherInfo) {weatherLiveData.value = https://www.it610.com/article/t}override fun onError(e: Throwable) {}}) } override fun onCleared() {super.onCleared()disposables.clear() }}
这里是用ViewModel中做的操作,如果是MVP模式放在Presenter中进行就好,首先通过Retrofit单例调用Service的对象的getWeather方法,指定上下游事件的线程,创建观察者对象进行监听,在onNext方法中拿到返回结果后回调给Activity,数据回调用的是LiveData,在Activity中操作如下
class MainActivity : AppCompatActivity() { private val viewModel by viewModels() 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
在Activity中
1.创建ViewModel对象
2.注册LiveData的回调
3.获取天气情况
如下图所示
文章图片
github地址:github.com/ZhiLiangT/R…
以上就是Android Retrofit框架的使用的详细内容,更多关于Android Retrofit框架的资料请关注脚本之家其它相关文章!
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)