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("","")

相关推荐

  1. AndroidRetrofit学习使用记录

    2024-07-21 15:02:02       21 阅读
  2. Android retrofit使用模板

    2024-07-21 15:02:02       124 阅读
  3. Android retrofit

    2024-07-21 15:02:02       23 阅读
  4. Android 使用 retrofit2 解析XML响应

    2024-07-21 15:02:02       52 阅读
  5. AndroidContentProvider学习记录

    2024-07-21 15:02:02       21 阅读
  6. Android应用活起来: Retrofit OkHttp比较参考

    2024-07-21 15:02:02       38 阅读
  7. Android Retrofit post请求,@Body传递参数转义问题

    2024-07-21 15:02:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 15:02:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 15:02:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 15:02:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 15:02:02       55 阅读

热门阅读

  1. Try ubuntu core (by quqi99)

    2024-07-21 15:02:02       20 阅读
  2. 独孤思维:副业赚钱,易如反掌

    2024-07-21 15:02:02       16 阅读
  3. Composition API对比Options API

    2024-07-21 15:02:02       15 阅读
  4. C# 删除DataTable里符合条件的行

    2024-07-21 15:02:02       16 阅读
  5. centos7更换yum源

    2024-07-21 15:02:02       16 阅读
  6. c++应用网络编程之五Windows常用的网络IO模型

    2024-07-21 15:02:02       17 阅读
  7. opencv—常用函数学习_“干货“_12

    2024-07-21 15:02:02       17 阅读
  8. AI文章特点详细分析

    2024-07-21 15:02:02       18 阅读
  9. ubuntu24无法网络无法连接的问题

    2024-07-21 15:02:02       15 阅读