小编Ale*_*ria的帖子

以正确的方式使用协程

我是第一次实现协程。我正在为一个简单的登录应用程序遵循 MVP 模式。这是我的代码流 -

单击的登录按钮将遵循此方向 -

LoginFragment -> LoginPresenter -> Repository -> APIRepository -> RetrofitInterface

登录响应将遵循这个方向 -

RetrofitInterface -> APIRepository -> Repository -> LoginPresenter -> LoginFragment

这是代码 -

RetrofitInterface.kt

@POST("login")
    fun loginAPI(@Body loginRequest: LoginRequest): Deferred<LoginResponse>?
Run Code Online (Sandbox Code Playgroud)

这是我的 Result.kt

sealed class Result<out T : Any> {

    class Success<out T : Any>(val data: T) : Result<T>()

    class Error(val exception: Throwable, val message: String = exception.localizedMessage) : Result<Nothing>()
}
Run Code Online (Sandbox Code Playgroud)

APIRepository.kt

override suspend fun loginAPICall(loginRequest: LoginRequest) : Result<LoginResponse>? {
        try {
            val loginResponse = apiInterface?.loginAPI(loginRequest)?.await() …
Run Code Online (Sandbox Code Playgroud)

java android kotlin kotlin-coroutines

5
推荐指数
2
解决办法
1787
查看次数

Kotlin协程处理错误和实现

首次使用协程。需要帮忙。

这是我的流程:

演示者要登录,因此调用存储库接口。仓库实现RepositoryInterface。因此,存储库调用APIInterface。APIInterface由APIInterfaceImpl实现。APIInterfaceImpl最终调用MyRetrofitInterface。

这是图解的流程图:

演示者->存储库-> APIInterfaceImpl-> MyRetrofitInterface

获得登录响应后:

APIInterfaceImpl->存储库->将数据存储在缓存中->将HTTP状态代码提供给Presenter

这是我的代码:

RepositoryInterface.kt

fun onUserLogin(loginRequest: LoginRequest): LoginResponse
Run Code Online (Sandbox Code Playgroud)

仓库

class Repository : RepositoryInterface {
   private var apiInterface: APIInterface? = null

   override fun onUserLogin(loginRequest: LoginRequest): LoginResponse {
         return apiInterface?.makeLoginCall(loginRequest)
   }
}
Run Code Online (Sandbox Code Playgroud)

APIInterface.kt

suspend fun makeLoginCall(loginRequest): LoginResponse?
Run Code Online (Sandbox Code Playgroud)

APIInterfaceImpl.kt

override suspend fun makeLoginCall(loginRequest: LoginRequest): LoginResponse? {
        if (isInternetPresent(context)) {
            try {
                val response = MyRetrofitInterface?.loginRequest(loginRequest)?.await()
                return response
            } catch (e: Exception) {
                //How do i return a status code here
            }
        } else {
        //How do …
Run Code Online (Sandbox Code Playgroud)

android coroutine kotlin kotlinx.coroutines

3
推荐指数
2
解决办法
2310
查看次数