Почему у меня ошибка?Android ProgressDialog + Тема - PullRequest
0 голосов
/ 11 февраля 2012

Итак, у меня есть код:

((Button) findViewById(R.id.run)).setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        progDialog = ProgressDialog.show(WaggActivity.this,
                                "", "Loading...", true, true);

                        new Thread(new Runnable() {
                            public void run() {
                                try {
                                    urlTxt.setText(findUrl(String.valueOf(search.getText())));
                                } catch (Exception e) {
                                    Log.e("MainActivity", e.getMessage());
                                }
                                progDialog.dismiss();
                            }
                        }).start();

Я не могу найти ошибку.:( Ошибка: Только оригинальные потоки, создавшие иерархию представлений, могут касаться его значений.

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

В Android у вас есть UI-поток, в котором создается ваша деятельность. Это единственный поток, в котором вы можете изменять представления, в вашем случае это ProgressDialog.

Так что вы не можете изменить его из других потоков, вы должны вызывать его из Ui-потока.

Вы должны позвонить: Activity.runOnUiThread(Runnable) ; Как объяснено здесь.

0 голосов
/ 11 февраля 2012

Не ясно ли сообщение об ошибке? Только главный поток может получить доступ к View s. Вы получаете доступ к urlTxt в другой пользовательской теме.

Чтобы решить эту проблему, используйте следующий фрагмент

    urlTxt.post(new Runnable() {
        public void run() {
          urlTxt.setText(findUrl(String.valueOf(search.getText())));
        }
    });
...