我有一个变量loginToken
。我想为赋值
var loginToken: String = getLoginToken()
以下是我的
getLoginToken
函数private fun getLoginToken(context: Context): String {
val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
var token = sharedPref.getString("token", null)
if (token == null) {
token = LoginManager(activity).getToken(onGetSuccess = {
// I get token here, i want to assign it to token var
}, onGetFailure = {
// I want to set token as empty string
})
}
return token
}
我应该如何给
token
赋值并最终仅在获得getToken调用的结果时才返回? 最佳答案
您可以使用 suspendCancellableCoroutine
将回调方法转换为协程。因此,对于协程方法,我们可以执行以下操作:
private fun getLoginToken(context: Context): String {
val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
var token = sharedPref.getString("token", null)
if (token == null) {
token = runBlocking { getTokenFromActivity(activity) }
}
return token
}
private suspend fun getTokenFromActivity(activity: Activity) =
suspendCancellableCoroutine {
LoginManager(activity).getToken(onGetSuccess = {
it.completeResume(result)
}, onGetFailure = {
it.completeResume("")
})
}
您也可以使用锁定方法。例如,使用
CountdownLatch
。 (将其锁定在getToken
函数之前,并在回调中准备好结果时将其解锁。)关于android - Kotlin:WAITING异步调用完成,然后将值分配给var,然后将其返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58664085/