为什么我的警报对话框不能在线程内工作?

时间:2011-08-15 18:48:10

标签: android multithreading handler progressdialog

我使用线程,以便在我的应用加载一些数据时显示进度对话框。如果出现错误,它将停止进度对话框并显示弹出窗口"错误"。但是我发现警报对话框无法在UI线程内运行,我需要使用Handler。有人可以帮忙解决这个问题吗?这是我的代码。感谢

verifyCode.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    final ProgressDialog progressDialog = ProgressDialog.show(
          Activate.this, "", "Loading...");    

    new Thread(new Runnable() {
        public void run() {
               try {
                     new AlertDialog.Builder(Activate.this)
                    .setTitle(getResources().getString(R.string.InvalidKey))
                    .setMessage(getResources().getString(
                    R.string.PleaseEntervalidRegistration)).setNeutralButton(
                    "OK", null).show();

                    progressDialog.dismiss();

                    //more code
     }).start();
}

1 个答案:

答案 0 :(得分:3)

您无法在非UI线程上更改UI元素。 onClick将在UI线程上运行,但由于您在Thread内生成onClick,因此无法从Thread内部操纵非UI元素。将您的AlertDialogProgressDialog来电转移到产生新Thread之前。

另外,正如@lightblade建议的那样,如果你需要做一些需要大量后台处理和基于该处理的UI操作的动作,那么你应该使用AsyncTask s。它提供了可以覆盖的方法,用于预处理,实际处理,后处理和更新进度。