如何使用RxAndroid或使用科特林协程现有的异步请求的结合?

问题描述 投票:0回答:1

这里是我的代码。我这是在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) {
    }
  })```
android kotlin android-asynctask rx-android kotlin-coroutines
1个回答
1
投票

你可以这样做与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

© www.soinside.com 2019 - 2024. All rights reserved.