2

我有这个问题:在长时间操作期间,我显示一个ProgressBar. 有时,在此操作期间,程序必须向用户索取一些信息。
然后,我想显示 a DialogBox,但如果这样做,我会收到错误消息,因为 aDialogBox期间无法显示 a Thread

我该如何解决我的问题?

4

2 回答 2

1

请使用 AsyncTask 而不是线程,那么它将起作用,您无法在线程中执行 UI 相关的工作。

AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序

阅读 AsyncTask

http://developer.android.com/reference/android/os/AsyncTask.html

Android 支持使用标准 Java Thread 类来执行异步处理。

Android 还提供 java.util.concurrent 包以在后台执行某些操作,例如使用 ThreadPools 和 Executor 类。

如果需要从新的线程更新用户界面,则需要与用户界面线程同步。

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html

于 2013-05-11T07:05:15.390 回答
1

我想这就是你想要的。

开始操作:-

new StartTask().execute("");

StartTask 类:-

    public class StartTask extends AsyncTask<String, Integer, String> {
        private ProgressDialog pdialog;

        @Override
        protected void onPreExecute() {

                // UI work allowed here
                pdialog = new ProgressDialog(syncContext);
                // setup dialog here
                pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                pdialog.setMessage("Updating...");
                pdialog.setCancelable(false);
                pdialog.show();
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
        if(pdialog != null) {
                pdialog.dismiss();
        }
        if(progress[0] == 0) {
            AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
        alertbox.setCancelable(false);
        alertbox.setMessage("This is first Alert").setPositiveButton("OK",
                new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                        pdialog.show();
                    }
                });
        alertbox.create();
        alertbox.show();
        } else if(progress[0] == 1) {
          AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
        alertbox.setCancelable(false);
        alertbox.setMessage("This is second  Alert").setPositiveButton("OK",
                new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                        pdialog.show();
                    }
                });
        alertbox.create();
        alertbox.show();
            }

        }

        @Override
        protected void onPostExecute(String returnVal) {
            // UI work allowed here
            if(pdialog != null) {
                pdialog.dismiss();
            }
        }

        @Override
        protected String doInBackground(String... params) {
            for(int i = 0; i < 3; i++) {
                //do some work here
                publishProgress(i);
            }
        }
    }
于 2013-05-11T14:30:07.463 回答