【发布时间】:2019-05-24 13:37:45
【问题描述】:
我正在尝试将我的所有回调更改为协程,我已经阅读过它们并且它们很吸引人!
我想要完成的只是登录一个用户,但如果登录逻辑失败,请通知我的演示者。
这是我做的
LoginPresenter.kt
class LoginPresenter @Inject constructor(private val signInInteractor: SignInInteractor) : LoginContract.Presenter, CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext = job + Dispatchers.Main
override fun signInWithCoroutines(email: String, password: String) {
launch {
view?.showProgress()
withContext(Dispatchers.IO){
signInInteractor.signInWithCoroutinesTest(email,password)
}
view?.hideProgress()
}
}
}
现在问题出在我的交互器上,因为它是一个挂起功能,我很想返回一个错误响应,以便我的演示者执行 view.showError(errorMsg)
SignInInteractor.kt
override suspend fun signInWithCoroutinesTest(email: String, password: String) {
FirebaseAuth.getInstance()?.signInWithEmailAndPassword(email, password).addOnCompleteListener {
if(it.isSuccessful){
//Want to notify the presenter that the coroutine has ended succefully
}else{
//want to let the courutine know about it.exception.message.tostring
}
}
}
我这样做的方式是使用通知我的演示者的回调
override fun signInWithCoroutinesTest(email: String, password: String) {
FirebaseAuth.getInstance()?.signInWithEmailAndPassword(email, password,listener:OnSuccessCallback).addOnCompleteListener {
if(it.isSuccessful){
listener.onSuccess()
}else{
listener.onFailure(it.exception.message.toString())
}
}
}
问题
协程操作成功后如何返回并通知我的presenter?
谢谢
【问题讨论】:
-
我认为你可以使用普通的try catch。 ` 启动 { 尝试 { firebaseAuth.signInWithEmailAndPassword(email, pass).await() startMainActivity() } catch (e: Exception) { showError(e.localizedMessage) } } `
标签: android kotlin coroutine kotlin-coroutines android-mvp