如何从Kotlin中的异步khttp请求获取响应数据

时间:2019-07-20 10:11:28

标签: android rest api http kotlin

我能够存储访问令牌,但是现在例如,我希望发出一条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()

0 个答案:

没有答案