在后台从Internet获取数据并显示ProgressDialog或ProgressBar

时间:2010-01-21 13:46:53

标签: android

我正在开发一个需要访问网站的应用程序 数据,并将在设备上显示该数据。我想从中获取数据 在后台上互联网并显示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-如果还有其他更好的方法吗?

谢谢

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()方法中完成。