51111111111Rating 5.00 (3 Votes)

Во время выполнения потока, задавался текст для TextView, в некоторых случаях работа потока завершалась ошибкой:

W/System.err(7094): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Ошибку можно исправить используя Handler, определяя его в методе OnCreate:

private Handler handler;
....
        // определяем handler
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                String text = (String) msg.obj;
                tvExtarnalIpData.setText( text );
            }
        };

В потоке, где указывался текст для TextView:

tvExtarnalIpData.setText(ip);

Изменяем на:

Message msg = new Message();
msg.obj = ip;
handler.sendMessage(msg);

Либо можно заменить указание TextView на:

Handler handler = new Handler(getBaseContext().getMainLooper());
handler.post( new Runnable() {
    @Override
    public void run() {
        tvExtarnalIpData.setText(ip);
    }
} );

Добавить комментарий


Защитный код
Обновить

Сейчас 312 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз