Я чувствую, что, должно быть, мне здесь не хватает чего-то простого. Я пытаюсь вернуть маркер входа, чтобы его можно было использовать в приложении. Токен входа в систему очень хорошо печатается на консоли в методе onResponse, но когда я пытаюсь вернуть этот токен, я не могу.
lateinit var authToken: String
fun getAuthToken(user: User): String {
sendPostRequest(user.username, user.password)
return authToken
}
fun sendPostRequest(userName: String, password: String): String {
var rb = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("username", userName)
.addFormDataPart("password", password)
.build()
val request = Request.Builder().url(URL_AUTH_ADDRESS).post(rb).build()
Log.d("request", request.toString())
val client = OkHttpClient()
var responseAuth = ""
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call?, response: Response?){
val body = response?.body()?.string()
authToken = response?.body()?.string()!!
Log.d("usersAuthToken", body)
}
override fun onFailure(call: Call?, e: IOException?) {
authToken = "fail"
}
})
Log.d("outside method", "resp: " + authToken)
return authToken
}
Как показано выше, произойдет сбой, сообщив, что authToken никогда не инициализируется,Но когда я удаляю операторы return, оператор Log.d("usersAuthToken", body)
печатает токен так, как должен.
Конечная цель - сохранить этот authToken в приложении после входа в систему. Я очень зеленый в этой областиKotlin, так что если есть лучший способ, который я пропускаю, ПОЖАЛУЙСТА, дайте мне знать!