• Как запустить цикл с okhttp3 в фоновом режиме Android?

    @kitcat2004
    Проверьте следующее:

    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 в блок, который будет выполнен в основном потоке,
    и избежит ошибок, связанных с обновлением интерфейса из фонового потока.
    Ответ написан