我是第一次实施协程.我正在为一个简单的登录应用程序遵循MVP模式.这是我的代码流-
单击的登录按钮将遵循此方向-
LoginFragment-> LoginPresenter->储存库-> APIRepository->改造接口
登录响应将遵循此方向-
RetrofitInterface-> APIRepository->储存库-> LoginPresenter-> LoginFragment
这是代码-
RetrofitInterface.kt
@POST("login")
fun loginAPI(@Body loginRequest: LoginRequest): Deferred?
这是我的Result.kt
sealed class Result {
class Success(val data: T) : Result()
class Error(val exception: Throwable, val message: String = exception.localizedMessage) : Result()
}
APIRepository.kt
override suspend fun loginAPICall(loginRequest: LoginRequest) : Result? {
try {
val loginResponse = apiInterface?.loginAPI(loginRequest)?.await()
return Result.Success(loginResponse!!)
} catch (e : HttpException) {
return Result.Error(e)
} catch (e : Throwable) {
return Result.Error(e)
}
}
仓库
override suspend fun loginUser(loginRequest: LoginRequest): Result {
if (isInternetPresent(context)) {
val result = apiRepositoryInterface?.loginAPICall(loginRequest)
if (result is Result.Success) {
val loginData = result.data
cache?.storeData(loginData)
}
return result!!
} else {
return Result.Error(Exception())
}
}
我现在如何在演示者中启动协程?我需要在后台线程上执行此API调用,然后在UI线程上发布结果吗?