2

ProgressDialogロード中に表示するために、SOでこのコードを見つけましたActivity

progDailog = ProgressDialog.show(MyActivity.this, "Process", "please wait....", true, true);

new Thread(new Runnable() {
    public void run() {
        // code for load activity
}).start();

Handler progressHandler = new Handler() {
    public void handleMessage(Message msg1) {
        progDailog.dismiss();
    }
};

しかし、私は常にこの例外を受け取ります:

java.lang.RuntimeException: Looper.prepare() を呼び出していないスレッド内でハンドラを作成できません

この問題について何か助けていただければ幸いです。よろしくお願いします。

4

3 に答える 3

6

バックグラウンドで「重い作業」を行うための
AsyncTaskは、次のとおりです。

public class MyTask extends AsyncTask<String, String, String> {
  private Context context;
  private ProgressDialog progressDialog;

  public MyTask(Context context) {
    this.context = context;
  }

  @Override
  protected void onPreExecute() {
    progressDialog = new ProgressDialog(context);
    progressDialog.show();
  }

  @Override
  protected String doInBackground(String... params) {
    //Do your loading here
    return "finish";
  }

  @Override
  protected void onPostExecute(String result) {
    progressDialog.dismiss();
    //Start other Activity or do whatever you want
  }
}

AsyncTask を開始します。

MyTask myTask = new MyTask(this);
myTask.execute("parameter");

もちろん、問題に合わせてAsyncTaskのジェネリック型を変更できます。

于 2012-04-12T06:57:52.960 に答える
1

問題は、ワーカー スレッド内で Handler を作成しようとしているためです。それは不可能。onCreate() 内またはメイン UI の別の場所にハンドラを作成します。また、ワーカー スレッドからハンドラにメッセージを送信できます。これは、Android では、メイン UI スレッド自体以外のスレッドから UI を変更できないためです。

于 2012-04-12T06:31:19.230 に答える
0

OnClick 内ではなく、メイン スレッドでハンドラーを作成する必要があります。

于 2012-04-12T02:08:21.633 に答える