Проверьте следующее:
updateUI активируется после gEditText и что gEditText не переинициализируется позже в коде.
Это важно, потому что lateinit свойства должны быть инициализированы до их использования.
Проверьте по коду FirstActivity не должна повторяться, возможно gEditText обращается к ней в нескольких местах, вызывая переинициализацию, таким образом код ходит по циклу снова и снова, вызывая из другого экземпляра .
Проверьте, что FirstActivity не пересоздается в процессе работы. Если это именно так, то создаст проблемы с инициализацией gEditText.
Код вызова updateUI должен быть в том же потоке, в котором и был создан FirstActivity.
обновление UI из другого потока может вызвать подобную ошибку.
===========================================ПРОШЛЫЙ ОТВЕТ ===========================================
вы пытаетесь обратиться к переменной gEditText, которая не была инициализирована.
Сейчас она инициализируется так:
gEditText = binding.gEditText
Убедитесь, что
binding.gEditText был успешно инициализирован в вашем Activity.
Это обычно происходит
в методе onCreate.
(binding) и gEditText должны быть внутри представления
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityFirstBinding.inflate(layoutInflater)
setContentView(binding.root)
gEditText = binding.gEditText
// Остальной код вашей Activity
}
ПРОВЕРЬТЕ ЭТО!
Если
binding.gEditText не был успешно инициализирован, проверяем,
что есть правильное представление и
gEditText
имеет правильный идентификатор в макете (ActivityFirstBinding).
====================СТАРОЕ ================
Используйте основной поток, вместо фона.
Ошибка вызвана природой ассинхронки сервиса
Чтобы обновить пользовательский интерфейс из фонового потока, вы должны использовать методы, предоставленные Android для выполнения операций в основном потоке.
Используйте функцию
runOnUiThread для обновления
gEditText в основном потоке.
Вот как можно изменить вашу функцию
updateUI:
override fun updateUI(data: String) {
// Здесь вы обновляете ваш интерфейс, например, ваш TextView
println("data updateUI: $data")
runOnUiThread {
// Обновление интерфейса в основном потоке
gEditText.text = "8888"
}
}
Это
обернет обновление gEditText.text в блок, который будет выполнен в основном потоке,
и
избежит ошибок, связанных с обновлением интерфейса из фонового потока.