因此,我正在使用AsyncHTTPClient进行呼叫并检查用户是否已通过身份验证。我有一个布尔“已认证”来检查它们是否是,并想在onSuccess内部更改其值,但是onSuccess似乎并没有影响外部已认证的值,我对为什么感到非常困惑。
我可以确认它确实进入了if语句,因此我得到的响应是正确的。我是Kotlin的新手,但是随着我现在的过渡,Java中的某些类似功能确实起作用。
这是我的代码:
fun authenticate(username: String, password: String): Boolean? {
var params = RequestParams()
params.put("username", username)
params.put("password", password)
var authenticated: Boolean? = null
var a: Int = 1
//Encrypt password and stuff
restClient.get("/authenticate", params, object : JsonHttpResponseHandler(){
override fun onSuccess(statusCode: Int, headers: kotlin.Array<out Header>?, response: JSONObject?) {
if(response == null) {Log.d("no response", "404")}
else if (response.get("success").toString() == "true") {
authenticated = true
a = a + 1
Log.d("authenticatedInside", a.toString())
Log.d("authenticatedInside", authenticated.toString())
}
}
})
Log.d("authenticated", a.toString())
Log.d("authenticated", authenticated.toString())
return authenticated
}
AuthenticatedInside提供正确的值。
a只是一个测试整数,这里的结果是a仍然为1,authenticated仍然为null,并且它也返回null。
答案 0 :(得分:3)
它是null
,因为onSuccess
方法是异步调用的,这意味着在您尝试访问authenticated
的值之前没有调用该方法,因此仍然是这样。 t已初始化。
解决此问题的方法之一是创建另一个函数,例如:
fun onAuthenticateResult(authenticated : Boolean){
// Write what you want to do with authenticated here
}
然后从onSuccess方法调用该方法,当然不会在UI线程上调用该方法,因此请注意不要直接在此方法内修改UI的任何部分。