我有一个显示进度对话框的方法......在一个单独的线程上,我正在执行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());
}
}
如何在每次请求之前更新进度对话框消息?
答案 0 :(得分:2)
您需要在runOnUIThread调用中对线程上的UI函数进行任何调用。 runOnUIThread接受runnable并在可用时在UI线程上执行它。这避免了只能在UI线程上更新UI的限制。
答案 1 :(得分:1)
从后台线程更新UI。你可以使用
在您的情况下,您应AsyncTask
基本上关注doInBackground()
方法中的网络通话,并在onPostExecute()
方法
答案 2 :(得分:0)
您不必为简单的网络呼叫编写自己的线程。您可以使用可以执行网络调用的AsyncTask
,从那里可以发布进度,这是可以在UI线程上安全运行的代码。
http://developer.android.com/reference/android/os/AsyncTask.html