kotlin: 用Retrofit+协程访问网络接口
一,安装第三方库
build.gradle.kts中添加
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("com.google.code.gson:gson:2.13.0")
然后点击:Sync Now 链接
二,代码:
json.php

接口model类
package com.example.okdemo2.net
import androidx.annotation.Keep
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.Serializable
//@InternalSerializationApi
/**
* 请求返回的BasicResponse 可以自己重新实现
*/
@Keep
@Serializable
open class ApiResponse<T>(
open var data: T? = null,
open var code: Int = -1,
open var msg: String = "",
open var status: String? = null,
open var time: String? = null,
) {
val isSuccess: Boolean
get() = code == 200
}
数据model类
package com.example.okdemo2.fragment
//import com.google.gson.annotations.
//import com.google.gson.annotations.SerializedName
//import java.io.Serializable
import androidx.annotation.Keep
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Keep
@Serializable
data class UserList(
@SerialName("list")
val `list`: MutableList<UserListItem>,
@SerialName("curPage")
val curPage: Int,
@SerialName("total")
val total: Int,
@SerialName("totalPage")
val totalPage: Int,
@SerialName("token")
val token: String,
)
@Keep
@Serializable
data class UserListItem(
@SerialName("id")
val id: Int,
@SerialName("name")
val name: String,
@SerialName("image")
val image: String,
)
接口列表:
package com.example.okdemo2.fragment
import com.example.okdemo2.net.ApiResponse
import retrofit2.http.GET
import retrofit2.http.QueryMap
interface ApiService {
@GET("/json.php")
suspend fun userList(@QueryMap map: MutableMap<String, Any>): ApiResponse<UserList>
}
调用retrofit访问接口
//按钮点击
binding.getJsonButton.setOnClickListener {
println("按钮被点击了")
val retrofit = Retrofit.Builder()
.baseUrl("http://www.nihonnoma.net")
.addConverterFactory(GsonConverterFactory.create())
.build()
val appService = retrofit.create(ApiService::class.java)
lifecycleScope.launch {
//参数
val params = mutableMapOf<String, Any>(
"p" to 1,
"count" to 20,
"token" to "王富贵到此一游"
)
//访问接口
val user = appService.userList(params)
println(user)
if (user.status == "success") {
println("成功")
println(user.data)
println("当前页:"+user.data?.curPage)
println("当前用户:"+user.data?.token)
println(user.data?.list)
} else {
println("失败")
println("错误代码:"+user.code)
println("错误信息:"+user.msg)
}
}
}
三,运行结果 :

浙公网安备 33010602011771号