Android Kotlin之Retrofit、Rxjava的使用

一.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)
        }

猜你喜欢

转载自blog.csdn.net/liulanzaijia/article/details/89477826