Kotlin retrofit 协程 最简单的使用(一)

一、 引入依赖
1、retrofit依赖
2、gosn转换依赖
3、网络日志依赖
4、协程依赖
代码如下:

implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0"

二、建立数据类
1、在setting plugins 中找到 JSON To Kotlin Class 插件,安装
Kotlin retrofit 协程 最简单的使用(一)_第1张图片
2、再kotlin 类文件中
直接使用 Alt+K 或者使用Alt+Insert 选择 如下
Kotlin retrofit 协程 最简单的使用(一)_第2张图片
进入Kotlin retrofit 协程 最简单的使用(一)_第3张图片
生成如下效果:
Kotlin retrofit 协程 最简单的使用(一)_第4张图片

三、编写接口文档
1、不使用协程
需要返回一个Call对象使用

interface IApiServices {
    @GET("getHealthCare")
      fun getAllHealthData(@Query("userId") userId: String):Call<AllHealthBean>
}

2、使用协程
直接返回数据类对象

interface IApiServices {
    @GET("getHealthCare")
  suspend  fun getAllHealthData(@Query("userId") userId: String):AllHealthBean
}

四、初始化retrofit

object API {

    val httpBuilder: OkHttpClient.Builder get() {
        // create http client
        val httpClient = OkHttpClient.Builder()
            .addInterceptor(Interceptor { chain ->
                val original = chain.request()

                //header
                val request = original.newBuilder()
                    .header("Accept", "application/json")
                    .method(original.method(), original.body())
                    .build()

                return@Interceptor chain.proceed(request)
            })
            .readTimeout(30, TimeUnit.SECONDS)

        // log interceptor
        val loggingInterceptor = HttpLoggingInterceptor()
        loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
        httpClient.addInterceptor(loggingInterceptor)

        return httpClient
    }

    // core for controller
    val service: IApiServices = create(IApiServices::class.java)

    lateinit var retrofit: Retrofit

    fun <S> create(serviceClass: Class<S>): S {
        val gson = GsonBuilder()
            .serializeNulls()
            .create()

        // create retrofit
        retrofit = Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("www") // Put your base URL
            .client(httpBuilder.build())
            .build()

        return retrofit.create(serviceClass)
    }



}

五、使用
1、不使用用协程

 API.service.getAllHealthData("").enqueue(object : Callback<AllHealthBean?> {
        override fun onResponse(
            call: Call<AllHealthBean?>,
            response: Response<AllHealthBean?>
        ) {
            Log.e(TAG, "onResponse: ${response.body()}" )
        }

        override fun onFailure(call: Call<AllHealthBean?>, t: Throwable) {}
    })

2、使用协程

 GlobalScope.launch(Dispatchers.Main){

        try {
            val allHealthBean=API.service.getAllHealthData("")
            Log.e(TAG, "launch initRetrofit: ${allHealthBean.toString()}" )
        }catch (e:Exception){
            Log.e(TAG, "initRetrofit: ${e.toString()}" )
        }
    }

你可能感兴趣的:(Android,kotlin,android)