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 }};}