1.配置请求BaseUrl地址
建立BaseHelper.kt
object RetrofitInstance {
private const val BASE_URL = "https://xxxxxxx.com/"
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build()
val apiService: ApiService = retrofit.create(ApiService::class.java)
}
2.部署请求接口地址
ApiService.kt
interface ApiService {
//登录接口
@POST("/api/Login.aspx)
@Headers("Content-Type:application/json")
suspend fun getLogin(@Body model: LoginModel?): LoginResult
}
3.建立请求类
LoginModel.kt
class LoginModel{
var userid:String= ""
var password:String= ""
}
4.建立ViewModel,视图UI和模型数据之间的媒介
class LoginVM: ViewModel() {
private val LoginRepo = LoginRepo()
var loginInfo: LoginResult? = LoginResult()
suspend fun getLogin(model: LoginModel) {
try {
loginInfo = withContext(Dispatchers.IO) {
LoginRepo.getLogin(model).invoke()
}
Log.d("接口对接:", loginInfo!!.Status)
} catch (e: Exception) {
Log.d("错误:1111111", e.toString())
}
}
}
5.UI界面请求写法
CoroutineScope(Dispatchers.Main) 通常用于确保协程中的代码在主线程上执行
Dispatchers.IO 是一个预定义的调度器,用于执行可能阻塞 I/O 的任务。它旨在优化 I/O 操作的性能,通过减少线程之间的上下文切换,并允许在等待 I/O 操作完成时释放线程。
withContext 函数用于切换协程的上下文,包括调度器。当你调用 withContext(Dispatchers.IO) 时,它会挂起当前协程,将其移动到 Dispatchers.IO 调度器的线程池中,然后在该线程池中恢复协程的执行。
private fun Login() {
//账号密码
val Info = LoginModel()
Info.userid=binding.edUserId.text.toString().trim()
Info.password=binding.edPassword.text.toString().trim()
CoroutineScope(Dispatchers.Main).launch {
withContext(Dispatchers.IO) {
Log.d("登录账号密码", "Login: " + Info.userid + Info.password)
//请求接口获取数据
viewModel.getLogin(Info)
updateLoginUI(Info) // 使用获取的数据来更新UI
}
};
}