我能够存储访问令牌,但是现在例如,我希望发出一条Toast消息,内容为“用户loggen以[username]身份登录”,但我收到此任务在工作线程上的错误,因此我需要在主线程中对此。但是我不知道如何从异步请求中将数据获取到主线程中,并最终对新的Activity做一个明确的Intent,同时还要传递用户的信息和访问令牌。
我已经为正在处理的项目提供了一个Web应用程序,现在我希望制作一个配套应用程序,它将使用我的Web应用程序REST api来获取和发布数据。该Web应用程序是一个使用Passport处理登录名的Laravel应用程序。我是android开发的新手,但是我能够将我的登录数据从我的android应用程序发布到Laravel应用程序,并获得有效的响应,这意味着电子邮件和密码匹配,因此我可以获得用户的信息和访问令牌。
inputSubmit.setOnClickListener { _ ->
val email = inputEmail.text.toString()
val password = inputPassword.text.toString()
val address = prefrence.getValueString("API_ADDRESS") + "/login"
val payload = mapOf("email" to email, "password" to password)
var response : String
var loginParsed : Login?
khttp.async.post(address, headers=mapOf("Accept" to "application/json"), data = payload, timeout = 10.0, onResponse = {
println("Status code: $statusCode")
//println("Response text: $text")
response = text
loginParsed = Klaxon().parse<Login>(response) //Works
prefrence.save("API_KEY", loginParsed?.access_token.toString()) //Works
println("Logged in user: " + loginParsed?.user_name.toString()) //Works
Toast.makeText(applicationContext, "Korisnik: " + loginParsed?.user_name.toString(), Toast.LENGTH_LONG).show()
}, onError = {
println("ERROR MESSAGE: $message") //Works
})
//println("Username: " + loginParsed) // ! Variable 'loginParsed' must be intialized
}
我想要的是能够访问khttp.async.post之外的数据,并传递到新的Activity中并发出Toast消息。当我尝试制作Toast消息时,出现以下错误:
I/System.out: ERROR MESSAGE: Can't create handler inside thread that has not called Looper.prepare()