Kotlin Retrofit 网络请求

一、添加依赖:

复制代码
    //Retrofit 网络请求
    implementation("com.squareup.retrofit2:retrofit:2.3.0")
    implementation("com.squareup.retrofit2:converter-gson:2.3.0")//json转换

二、创建单例类:

复制代码
package com.example.buju.http

import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

/**
 * retrofit网络请求
 * */
object HiRetrofit {
    val client = OkHttpClient.Builder()// builder构造者设计模式
        .connectTimeout(10, TimeUnit.SECONDS)//连接超时时间
        .readTimeout(10, TimeUnit.SECONDS)// 读取超时
        .writeTimeout(10, TimeUnit.SECONDS)// 写超时
        .addInterceptor(LoggingInterceptor())// 自定义拦截器
        .build()

    private var retrofit:Retrofit = Retrofit.Builder() // Builder构造者设计模式
        .client(client)// 借助okhttp3创建的client
        .baseUrl("baseUrl")// 网络请求前面的公共地址
        .addConverterFactory(GsonConverterFactory.create())// 数据转换适配器
        .build()

    fun <T> create(clazz: Class<T>):T{
        return retrofit.create(clazz)
    }

}

三、创建网络请求Api:

复制代码
package com.example.buju.http

import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query

/**
 * retrofit网络请求定义Api
 * */
interface ApiService {
    // 根据用户id查询信息
    @GET(value = "user/query")
    fun queryUser(@Query(value="userId",encoded = true) userId:String):Call<HashMap<String,String>>

}

使用:

复制代码
   val apiService:ApiService = HiRetrofit.create(ApiService::class.java)
        apiService.queryUser("0001").enqueue(object:Callback<HashMap<String,String>>{
            override fun onResponse(
                call: Call<HashMap<String, String>>,
                response: Response<HashMap<String, String>>
            ) {
                Log.e("Retrofit",response.body()?.toString() ?:"不知道原因")
            }

            override fun onFailure(call: Call<HashMap<String, String>>, t: Throwable) {
               Log.e("Retrofit",t.message?:"不知道原因")
            }
        })
相关推荐
从零开始的代码生活_5 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸6 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地6 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
yaoxin5211237 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy7 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
小钻风33668 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言
btown8 小时前
Kotlin 版 MyBatis-Plus 查询优雅解决方案
kotlin
qq_452396239 小时前
第二篇:《Go 开发环境搭建:SDK、IDE、Module 与 Hello World》
开发语言·ide·golang
天青色等烟雨..9 小时前
全流程ArcGISPro空间分析、三维建模、可视化及Python融合应用技术
开发语言·python
丰锋ff9 小时前
1.2 Qt常用基础类型
开发语言·qt