我想在需要将数据上传到服务器时显示ProgressDialog。
我已查看此问题Best way to show a loading/progress indicator? 最好的答案是
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.show();
// To dismiss the dialog
progress.dismiss();
当我试图在我的代码中实现这一点时,没有任何显示! 我在这里做错了什么?!
这是我的代码
private void UpdateData()
{
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.show();
try
{
UpdateWSTask updateWSTask = new UpdateWSTask();
String Resp = updateWSTask.execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
progress.dismiss();
}
答案 0 :(得分:4)
使用ProgressDialog
显示AsyncTask
的正确方法是在onPreExecute()
的{{1}}方法上显示对话框并将其隐藏在AsyncTask
它的方法:
onPostExecute()
两者:onPreExecute()和onPostExecute()在主线程上运行,而名称建议的doInBackground()在后台线程上执行。
修改强> 在您的活动中,您想要调用AsyncTask,只需执行它:
private class SampleTask extends AsyncTask<Void, Integer, String> {
ProgressDialog progress = new ProgressDialog(YourActivity.this);
protected Long doInBackground(Void... urls) {
// execute the background task
}
protected void onPreExecute(){
// show the dialog
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setIndeterminate(true);
progress.show();
}
protected void onPostExecute(String result) {
progress.hide();
}
}
答案 1 :(得分:0)
更好的想法是使用AsyncTask类来做到这一点。您可以在preExecute和postExecute方法中处理UI工作,并在doInBackground方法中完成主要工作。很干净!
看来你已经这样做了。将对话框代码移动到asynctask类。您只需要对上下文的引用,并且可以为它提供自定义asynctask类的构造函数