为什么我有错? android ProgressDialog + Thread

时间:2012-02-11 15:35:56

标签: android multithreading progressdialog

所以,我有一个代码:

((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 个答案:

答案 0 :(得分:1)

在Android中,您有一个UI-Thread,其中由您的活动创建。这是您可以修改视图的唯一线程,在您的情况下是ProgressDialog。

所以你不能从其他线程修改它,你必须从你的Ui线程中调用它。

您应致电:Activity.runOnUiThread(Runnable) ;正如here.

所述

答案 1 :(得分:0)

错误消息是否安静?只有主线程可以访问View。 您正在另一个自定义主题中访问urlTxt

要解决此问题,请使用以下代码段

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