Передача сообщений потока Java - PullRequest
1 голос
/ 16 июня 2010

Я пишу приложение для Android.У меня есть метод main, который создает и запускает новый поток, используя анонимный внутренний класс Runnable.По завершении метод run () вызывает метод своего родительского класса (в основном потоке), который вызывает notifyDataSetChanged (), чтобы основной поток мог перерисовать новые данные.Это вызывает всевозможные проблемы (ViewRoot $ CalledFromWrongThreadException).

Дело в том, что этот метод, вызываемый из рабочего потока, находится в классе, созданном в потоке пользовательского интерфейса.Разве это не должно выполняться в потоке пользовательского интерфейса?Или я что-то упустил?

Вот код, о котором я говорю:

public class Mealfire extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        (new Thread() {
            public void run() {
                // Do a bunch of slow network stuff.
                update();
            }
        }).start();
    }

    private void update() {
        myAdapter.notifyDatasetChanged();
    }
}

1 Ответ

2 голосов
/ 16 июня 2010

Вы пытались вызвать код обновления интерфейса пользователя с помощью Activity # runOnUiThread ?Как то так:

private void update() {
    runOnUiThread(new Runnable() {
        public void run() {
            myAdapter.notifyDatasetChanged();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...