如何获得进度对话框,直到从android中的服务获得响应?

时间:2012-03-05 09:15:39

标签: android web-services response show progress

我正在实现一个应用程序,从服务获取响应并显示以查看。我使用了两个文本视图来获取来自service的两种类型的响应。当我单击文本视图时,我得到的响应是很晚才用户界面暂停此时我希望在视图上显示繁忙的进度对话框,当我得到响应时,我想关闭该进度对话框。我正在更新视图以响应列表视图。 我已经实现了如下代码:

 textView1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
waitProgreess = ProgressDialog.show(ShoutGetMsgsScreen.this, "Please wait", "Loading...");
 resultFromService = new ParseXml().convertMessages(new Model().getMessages("0"));
lst.setAdapter(new CustomeAdapter(ShoutGetMsgsScreen.this, resultShoutMessage));

    if(resultFromService .size()>5){

                    waitProgreess.dismiss();
                }
   }
        }); 

从上面的实现中我如何显示进度对话框以及何时更新视图然后如何关闭进度对话框?

请任何人帮助我......

4 个答案:

答案 0 :(得分:1)

为此目的

Android - AsyncTask。只需看看它的一些基本教程。对于相同的需求,它有onPreExecute()doInBackground()onPostExecute()

答案 1 :(得分:1)

private class GetDATA extends AsyncTask<Void, Void, Void>
{
    ProgressDialog pd;
    @Override
    protected void onPreExecute() {
        pd = ProgressDialog.show(Activity.this, "", getString("loding..."), true, false);
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {


resultFromService = new ParseXml().convertMessages(new Model().getMessages("0"));
return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if (pd != null && pd.isShowing())
            pd.dismiss();
        }

lst.setAdapter(new CustomeAdapter(ShoutGetMsgsScreen.this, resultShoutMessage));

    }
}

这样打电话: -

(new GetDATA()).execute();

答案 2 :(得分:0)

您有两种方法可以做到这一点。

  1. Handeler

    Handler具有callBack方法,即handleMessage()。

  2. 的AsyncTask

    AsyncTask有三个回调方法onPreExecute(),doInBackground()和onPostExecute()

  3. 您可以选择其中任何一种。

答案 3 :(得分:0)

查看此链接以获取对Handler / AsyncTasks的一些了解,这也包含一些示例:http://www.vogella.de/articles/AndroidPerformance/article.html#concurrency_handler