Не удается разрешить CalledFromWrongThreadException с помощью обработчика - PullRequest
2 голосов
/ 12 мая 2010

Я постараюсь сделать это проще:

В своей основной деятельности я делаю обработчик:

public class ARViewer extends ARDisplayActivity {

    public final MHandler mHandler = new MHandler(this);

 public void onCreate(Bundle savedInstanceState) {
...

Класс MHandler:

public final class MHandler extends Handler{

        //main activity
 private ARViewer arnv;

        public MHandler(ARViewer arnv){
  this.arnv = arnv;
 }

        @Override
 public void handleMessage(Message msg) {
            ...
            case H_RR :
                  arnv.setContentView(R.layout.routeplanner);    
                  break;
            ...
  super.handleMessage(msg);
 }
}

Но если я вызываю метод handleMessage из функции обратного вызова в другом классе, определенно из другого потока, я все равно получаю сообщение об исключении: CalledFromWrongThreadException (Only the original thread that created a view hierarchy can touch its views):

public void rFound(Route route) {
           Message msg = new Message();
           msg.what = MHandler.H_RR;
           ARViewer.arnv.mHandler.handleMessage(msg);
}

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Вам не нужна ссылка на активность там. Создайте новый runnable, где вы делаете свой пользовательский интерфейс. И сделайте mHandler.post (myUIRunnable); Пример здесь: http://developer.android.com/guide/appendix/faq/commontasks.html#threading

0 голосов
/ 12 мая 2010

Вы должны вызвать sendMessage () для обработчика с идентификатором сообщения H_RR. Это автоматически вызовет handleMessage () в основном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...