一.Retrofit定义:
Retrofit是square开源的网络Restful请求框架,底层是基于okhttp的,也就是封装okhttp的一个网络请求框架,是基于java的动态代理来实现的,开发者只要定义接口就可以了。
二.Retrofit特点:
1.底层基于okhttp
2.使用Restful设计风格
3.通过注解配置网络请求
4.支持同步、异步请求
5.支持各种数据解析,如Gson、Json、xml等
6.支持Rxjava扩展
三.Retrofit在kotlin的使用:
1.添加Retrofit依赖库,这里okhttp和gson也一块引入了
api 'com.squareup.retrofit2:retrofit:2.4.0'
api 'com.squareup.okhttp3:okhttp:3.11.0'
api 'com.squareup.retrofit2:converter-gson:2.3.0'
2.创建数据实体类
扫描二维码关注公众号,回复:
6164007 查看本文章
定义接收到数据的实体类:
class BaseBean<T>{
var errno: Int? = null
var errmsg: String? = null
var data: T? = null
val isSuccess: Boolean
get() = if (errno == 0) true else false
}
/**
*使用人实体类
*/
class PersionBean{
var uid: Int? = null
var nickname: String? = null
var age: Int? = 0
}
3.创建网络请求接口
interface IRequest{
@GET("/study/persionlist/uid/{uid}")
fun getPersionList(@Path("uid")uid: Int):Call<BaseBean<List<PersionBean>>>
}
4.创建Retrofit实例
private var retrofit: Retrofit? = null
init {
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
5.创建请求接口实例
retrofit!!.create(IRequest::class.java)
6.发送网络请求
val apiService = ApiClient().getApiService()
apiService!!.getPersionList(1).enqueue(object : Callback<PersionBean>{
override fun onResponse(call: Call<PersionBean>, response: Response<PersionBean>) {
}
override fun onFailure(call: Call<PersionBean>, t: Throwable) {
}
})
至此retrofit的简单使用步骤就到这里了,还需要根据服务器返回数据规定来处理返回的数据。
四.使用Rxjava请求:
1.Call改成Observable:
interface IRequest{
@GET("/study/persionlist/uid/{uid}")
fun getPersionList(@Path("uid")uid: Int):Observable<BaseBean<List<PersionBean>>>
}
2.加入rxjava适配:.addCallAdapterFactory(RxJava2CallAdapterFactory.create()):
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
3.请求:
val apiService = ApiClient().getApiService()
apiService!!.getPersionList(1)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { next ->
Log.e(TAG, "result = " + next.data)
}