第一次使用协程。需要帮助。
这是我的流程:
Presenter想要登录,所以调用Repository接口。Repository实现了RepositoryInterface。因此,Repository调用APIInterface。APIInterface由APIInterfaceImpl实现。最终,APIInterfaceImpl调用MyRetrofitInterface。
以下是逻辑图:
Presenter -> Repository -> APIInterfaceImpl -> MyRetrofitInterface
一旦我获得登录响应:
APIInterfaceImpl -> Repository -> 将数据存储在缓存中 -> 将http状态码提供给Presenter
以下是我的代码:
RepositoryInterface.kt
fun onUserLogin(loginRequest: LoginRequest): LoginResponse
代码库.kt
class Repository : RepositoryInterface {
private var apiInterface: APIInterface? = null
override fun onUserLogin(loginRequest: LoginRequest): LoginResponse {
return apiInterface?.makeLoginCall(loginRequest)
}
}
API接口.kt
suspend fun makeLoginCall(loginRequest): LoginResponse?
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 i return no internet here
return Exception(Constants.NO_INTERNET)
}
}
MyRetrofitInterface.kt
@POST("login/....")
fun loginRequest(@Body loginRequest: LoginRequest): Deferred<LoginResponse>?
我的问题是:
- 我的架构是否正确?
- 如何在代码中传递HTTP错误代码或者没有网络连接的情况?
- 有没有更好的解决方案?