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和模型數(shù)據(jù)之間的媒介
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) 通常用于確保協(xié)程中的代碼在主線程上執(zhí)行
Dispatchers.IO 是一個預(yù)定義的調(diào)度器,用于執(zhí)行可能阻塞 I/O 的任務(wù)。它旨在優(yōu)化 I/O 操作的性能,通過減少線程之間的上下文切換,并允許在等待 I/O 操作完成時釋放線程。
withContext 函數(shù)用于切換協(xié)程的上下文,包括調(diào)度器。當(dāng)你調(diào)用 withContext(Dispatchers.IO) 時,它會掛起當(dāng)前協(xié)程,將其移動到 Dispatchers.IO 調(diào)度器的線程池中,然后在該線程池中恢復(fù)協(xié)程的執(zhí)行。
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)
//請求接口獲取數(shù)據(jù)
viewModel.getLogin(Info)
updateLoginUI(Info) // 使用獲取的數(shù)據(jù)來更新UI
}
};
}