从线程外部更新进度对话框

时间:2013-08-01 15:19:13

标签: java android multithreading http progressdialog

我有一个显示进度对话框的方法......在一个单独的线程上,我正在执行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());
    }
}

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

3 个答案:

答案 0 :(得分:2)

您需要在runOnUIThread调用中对线程上的UI函数进行任何调用。 runOnUIThread接受runnable并在可用时在UI线程上执行它。这避免了只能在UI线程上更新UI的限制。

答案 1 :(得分:1)

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

  1. 处理程序:http://developer.android.com/reference/android/os/Handler.html
  2. AsyncTask:http://developer.android.com/reference/android/os/AsyncTask.html
  3. 在您的情况下,您应AsyncTask基本上关注doInBackground()方法中的网络通话,并在onPostExecute()方法

    中更新进度对话框

答案 2 :(得分:0)

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

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