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 } }; }
标签:Info,val,LoginModel,接口,Studio,IO,Android,Dispatchers From: https://www.cnblogs.com/MaoZhuaShi/p/18643706