我在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()
我非常感谢您对此问题的任何帮助,谢谢。
答案 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内部创建处理程序。