2

我在 SO 中发现这段代码在ProgressDialog加载时显示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
  }
}

启动异步任务:

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

当然,您可以更改AsyncTask的通用类型以匹配您的问题。

于 2012-04-12T06:57:52.960 回答
1

问题是因为您试图在工作线程中创建处理程序。这不可能。在 onCreate() 或主 UI 的其他位置创建您的处理程序。您可以从您的工作线程向您的处理程序发送消息。这是因为 Android 不允许您从除主 UI 线程本身之外的任何其他线程修改 UI。

于 2012-04-12T06:31:19.230 回答
0

您需要在主线程上而不是在 OnClick 内部创建处理程序。

于 2012-04-12T02:08:21.633 回答