Я новичок в Kotlin, и у меня есть простой вопрос: я преобразую весь свой проект из Java в Kotlin, и мне удается исправить все ошибки с документацией.
Но мне не удалось преобразоватьОбратный вызов внутри ответного обратного вызова модифицированного Java для kotlin.
fun getUserAccountController(token: String, callback: UtilsCallback): Users {
userAccountServices.getUserAccount(token).enqueue(object : Callback<Result> {
override fun onResponse(call: Call<Result>, response: Response<Result>) {
if (response.isSuccessful) {
Log.i("Callback TOKEN ok ==> ", response.body()!!.resultUser!!.name)
user.name = response.body()!!.resultUser!!.name
user.username = response.body()!!.resultUser!!.username
callback.onData(user) // ==> Here my CALLBACK function
} else {
user.username = ""
user.name = ""
callback.onData(user) // ==> Here my CALLBACK function
}
}
override fun onFailure(call: Call<Result>, t: Throwable) {
Log.i("Callback TOKEN Nok ==> ", "error")
}
})
return user
}
Мой обратный вызов - это функция callback.onData
Handler().postDelayed({
user = userAccountController.getUserAccountController(token) {
fullName!!.text = user.name
firstName!!.text = user.name
email!!.text = user.username
}
}, 50)
}
И он преобразует мой код по этому выше, я не понимаю, почему.
Ниже приведено сообщение об ошибке:
Может быть, я должен использовать другой способ?Моя цель в этом примере - получить мои данные из успешного асинхронного ответа для обновления моей активности.
Спасибо за чтение.
РЕДАКТИРОВАТЬ
Я также публикую своипредыдущий код JAVA, который работал хорошо
new Handler().postDelayed(new Runnable(){
@Override
public void run(){
user = userAccountController.getUserAccountController(token, new UtilsCallback() {
@Override
public void onData(Users userBack) {
fullName.setText(user.getName());
firstName.setText(user.getName());
email.setText(user.getUsername());
}
});
}
},50);
}
РЕДАКТИРОВАТЬ 2 Мой новый код Котлина, предложенный @ Roland
Handler().postDelayed({
user = userAccountController.getUserAccountController(token, UtilsCallback {
fullName!!.text = user.name
firstName!!.text = user.name
email!!.text = user.username
})
}, 50)
}
РЕДАКТИРОВАТЬ3: Мой интерфейс kotlin
package com.util.my3ciapplication
import com.model.my3ciapplication.Users
interface UtilsCallback {
fun onData(user: Users)
}