【发布时间】:2021-04-04 04:55:42
【问题描述】:
我正在使用 Ion 进行 REST API 调用以登录用户。为了做到这一点,我得到了 Ion 返回给我的 accessToken(这是异步的)。最初,我在活动和回调中做所有事情(我得到了 accessToken,然后开始一个新的活动意图,同时将此令牌发送到下一个活动)。那样工作得很好。 现在,我将我的项目重构为 MVP 架构,因此我将 Ion 网络调用拆分为不同的类(在 MVP 的模型层级别)。但是,我有一个问题。它总是返回 null 我怀疑这是因为函数在 Ion 完成其异步任务之前返回。有什么想法吗?
这是我想从中获取 loginSession 的函数:
override fun userAuth(username: String,
password: String,
context: Context): LoginSession? {
var loginSession: LoginSession? = null
Ion.with(context)
.load("https://myURL")
.setBodyParameter("UserName", username)
.setBodyParameter("Password", password)
.asString()
.setCallback { e, result ->
try {
val json = JSONObject(result)
val expiresIn = json.getInt("expires_in")
val tokenType = json.getString("token_type")
val refreshToken = json.getString("refresh_token")
val accessToken = json.getString("access_token")
loginSession = LoginSession(expiresIn, tokenType, refreshToken, accessToken)
} catch (jsonException: JSONException) {
jsonException.printStackTrace()
}
}
return loginSession
}
【问题讨论】:
-
ion 支持 kotlin 协程。阅读this
-
没问题@GP2Dev,如果它对您有帮助,请务必支持我的问题和答案,以供将来的其他人使用
标签: android kotlin asynchronous return mvp