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?:"不知道原因")
            }
        })
相关推荐
1024奇点7 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch8 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
Knight_AL8 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing039 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by209999 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
alexhilton9 小时前
提升 Android Compose 页面的流畅度
android·kotlin·android jetpack
砚底藏山河9 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮10 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻10 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble10 小时前
C++ 用互斥锁实现读写锁
开发语言·c++