这里是我的代码。我这是在SDK中实现异步请求。我用它来了,我已经实现了简单的调用方式登录该异步请求提供的回调。我的问题是可能的,如果使用RxAndroid或科特林协同程序本异步请求的结合?正如我将有很多回调链,以避免它,我想与RxJava或科特林协同程序相结合。 referening到样品的任何暗示可能是goodl
private fun automaticLogin() {
UserAction(username, password).login(AutomaticUserLoginRequest(this))
}
class AutomaticUserLoginRequest()
: UserLoginRequest( object : ILoginResultHandler {
override fun onSuccess(session: ISession) {
}
override fun onError(error: Error) {
}
})```
你可以这样做与suspendCoroutine
功能:
suspend fun automaticUserLoginRequest(): ISession {
return suspendCoroutine<ISession> { cont ->
callUserLoginRequest(object : ILoginResultHandler {
override fun onSuccess(session: ISession) {
cont.resume(session)
}
override fun onError(error: Error) {
cont.resumeWithException(error)
}
}
}
}
你可以从一个协程执行的暂停功能。该kotlinx.coroutines,Android提供了该Dispatchers.UI
:
fun someFunction() {
//starts a coroutine, not waiting fro result
launch(Dispatchers.UI) {
val session = automaticUserLoginRequest()
//the execution will resume here once login is done, it can be an exception too
updateUI(session)
}
}
https://github.com/Kotlin/kotlinx.coroutines/blob/master/ui/kotlinx-coroutines-android/README.md