ProgressDialog在加载Activity时

时间:2012-04-11 23:30:04

标签: android handler progressdialog

我在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()

我非常感谢您对此问题的任何帮助,谢谢。

3 个答案:

答案 0 :(得分: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 的泛型类型以匹配您的问题。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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