第一次使用协同程序.我需要帮助.
Here is my flow:
演示者想要登录,因此调用存储库接口.存储库实现RepositoryInterface. 所以Repository调用APIInterface.APIInterface由APIInterfaceImpl实现. APIInterfaceImpl最终调用MyRetrofitInterface.
Here is the flow diagrammatically:
Presenter -> Repository -> APIInterfaceImpl -> MyRetrofitInterface
一旦我得到登录响应:
APIInterfaceImpl -> Repository -> Stores the data in cache -> Gives http status code to Presenter
Here is my code:
RepositoryInterface.kt
fun onUserLogin(loginRequest: LoginRequest): LoginResponse
Repository.kt
class Repository : RepositoryInterface {
private var apiInterface: APIInterface? = null
override fun onUserLogin(loginRequest: LoginRequest): LoginResponse {
return apiInterface?.makeLoginCall(loginRequest)
}
}
APIInterface.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错误代码或没有internet连接
- 还有更好的解决方案吗?