Android中Retrofit的学习和使用记录

一 概述

是Android一个restful风格的网络请求框架,本质上还是OkHttp进行请求,Retrofit负责对接口的封装。 Retrofit 接口层封装请求参数、Header、Url 等信息。

二 优点

我们先看OkHttp的缺点,
1)接口配置繁琐,尤其是需要配置body、header、参数等时候
2)需要手动对拿到的responseBody进行解析,不好复用
3)没自动线程切换
Retrofit的优点就是对上面的缺点进行了优化。

三 代码

注意BaseUrl要以/结尾,不然会报错。
这里是一个get请求示例。
网址是${BASE_URL}test?name = " "&age = “”

3.1 Api

对请求网址参数进行封装

interface Api {
    @GET("test")
    suspend fun getUser(
        @Query("name") name: String,
        @Query("age") age: String
    ):ApiResponse<List<User>>
}

bean类User

data class User(
val name: String = "",
val age: String = ""
)

Response封装

data class ApiResponse<T>(
    val code: String,
    val data: T
)

3.2 RetrofitManager

创建OkHttpClient实例,创建Retrofit 实例和传入的 serviceClass(一个接口类)来创建一个实现了该接口的网络服务实例。

  private val okHttpClient: OkHttpClient
        get() =OkHttpClient.Builder()
            //日志拦截器
            .addInterceptor(logInterceptor)
            //请求超时时间
            .connectTimeout(TIME_OUT_SECONDS,TimeUnit.SECONDS)
            .build()
 fun<T> getService(serviceClass: Class<T>,baseUrl: String? = null) : T{
        return Retrofit.Builder()
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())//添加Gson转换器
            .baseUrl(BASE_URL)
            .build()
            .create(serviceClass)
    }

3.3 DataRepository

继承Api, 用Api类来创建请求服务实例,重写Api的方法,返回服务实例进行调用的结果。

object DataRepository: Api {
    private val service by lazy { RetrofitManager.getService(Api::class.java) }

    override suspend fun getUser(
        name: String,
        age: String
    ): ApiResponse<List<User>> {
        return service.getUser(name, age)
    }
    
}

3.4 在ViewModel中请求

 fun getUser(name: String,age: String){
        viewModelScope.launch {
            val result = DataRepository.getUser()
            Log.d("tian", "retrofit:$result")
        }
    }

3.4 最后在ui里面调用

getUser("","")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值