1

我有一个显示进度对话框的方法......并且在一个单独的线程上我正在执行 3 个 HTTP 请求......

这是代码...

public void downloadData(View v)
{
    final ProgressDialog prog;

    try
    {
        // setup progress dialog
        prog = new ProgressDialog(this);
        prog.setTitle("Downloading Data");
        prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        prog.setIcon(R.drawable.firstdroidicon);
        prog.setCanceledOnTouchOutside(false);
        prog.setCancelable(false);
        prog.show();


        Thread syncThread = new Thread();
        syncThread = new Thread()
        {
            public void run()
            {
                String result = "";
                String URL = //url for ReST service
                String urlParams = "";

                GetByREST gbr = new GetByREST();

                // run the customer search
                prog.setMessage("Fetching Customers");//update progress dialog
                result = //execute first post

                // run the contact search
                prog.setMessage("Fetching Contacts");//update progress dialog
                result = //execute second post

                // run the item saved search
                prog.setMessage("Fetching Items");//update progress dialog
                result = //execute third post

                prog.dismiss();
        };
        syncThread.start();
    }
    catch (Exception e)
    {
        messageBox("downloadData", e.getMessage());
    }
}

如何在每个请求之前更新进度对话框消息?

4

3 回答 3

2

您需要在 runOnUIThread 调用中包装对线程上的 UI 函数的任何调用。runOnUIThread 接受一个可运行对象,并在可用时在 UI 线程上执行它。这绕过了只能在 UI 线程上更新 UI 的限制。

于 2013-08-01T15:26:41.117 回答
1

从后台线程更新 UI。您可以使用

  1. 处理程序:http: //developer.android.com/reference/android/os/Handler.html
  2. 异步任务:http : //developer.android.com/reference/android/os/AsyncTask.html

在您的情况下,您应该AsyncTask基本上注意方法中的网络调用并更新方法doInBackground()中的进度对话框onPostExecute()

于 2013-08-01T15:27:19.613 回答
0

您不必为简单的网络调用编写自己的线程。您可以使用AsyncTask它来执行您的网络调用,并从那里您可以发布进度,这是可以在 UI 线程上安全运行的代码。

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

于 2013-08-01T15:25:57.323 回答