我正在开发一个需要访问网站的应用程序 数据,并将在设备上显示该数据。我想从中获取数据 在后台上互联网并显示ProgressDialog或ProgressBar 设备和应用程序从服务器应用程序接收响应时 关闭对话框或栏并显示数据。
为此,我使用的是AsyncTask -
AsyncTask的代码如下 -
ServerTask extends AsyncTask {
@Override
protected void onPreExecute() {
dialogAccessingServer = new ProgressDialog(ctx);
dialogAccessingServer.setMessage(shownOnProgressDialog);
dialogAccessingSpurstone.show();
}
@Override
protected ServerResponse doInBackground(String... urlArray) {
String urlString = urlArray[0];
HttpResponse serverResponseObject = null;
//finding HttpResponse
return serverResponseObject;
}//end of doInBackground
@Override
protected void onPostExecute(HttpResponse serverResponseObject){
dialogAccessingSpurstone.dismiss();
}
}
并按如下方式调用此代码 -
ServerTask serverTaskObject = new ServerTask();
serverTaskObject.execute();
HttpResponse response = serverTaskObject.get();
//对响应执行操作
但没有显示ProgressDialog。(我猜它的原因是 线程不完整,android只在线程有效时才会失效 完成)。
我的问题 - 1-如果我的猜测是对的?如果是,那么我应该如何实施呢? 2-如果还有其他更好的方法吗?
谢谢
答案 0 :(得分:2)
以下是在后台执行任务时显示ProgressDialog的模板代码:
class GetTask extends AsyncTask<Object, Void, String>
{
Context mContext;
ProgressDialog mDialog = null;
GetPhotoFeedTask(Context context)
{
mContext = context;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
mDialog = new ProgressDialog(mContext);
mDialog.setMessage("Please wait...");
mDialog.show();
}
@Override
protected String doInBackground(Object... params)
{
// do stuff in background : fetch response
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
setProgressBarIndeterminateVisibility(false);
// mDialog.dismiss();
}
}
并使用new GetTask(this).execute()
声明从您的活动中调用它;
注意:请注意,如果用户切换方向或导致事件发生时显示ProgressDialog
,则代码可能会中断。建议对此类情况使用托管对话框。
答案 1 :(得分:1)
如果在UI线程上有一些待处理的工作“进度对话框”将不会出现,那么dialog.show()应该是UI线程的最后一行,并且任何进一步的工作都应该在onPostExecute()方法中完成。