Android:服务器调用例程的不确定进度条



我正在为类开发一个简单的 I.M android 应用程序,该应用程序对服务器进行查询并在 ListView 上显示结果(即消息)。其中一个要求是应用在进行查询时显示无限期进度条。这意味着我必须在查询开始时将进度条小部件设置为 View.VISIBLE,在查询结束时设置为 View.VISIBLE。我遇到的麻烦是查询是在不同的 Java 类中定义的后台函数,所以虽然我想做这样的事情:

        ProgressBar pb = (ProgressBar) findViewById(R.id.progressBar);
        pb.setVisibility(View.VISIBLE);
        ...
        ...
        uploader.execute(myCallSpec);
        ...
        ...
        pb.setVisibility(View.INVISIBLE);

这不起作用,因为服务器调用在后台运行。使用此代码,就好像进度条甚至从未显示过一样。

如何将进度条设置为在服务呼叫开始时显示,然后在呼叫完成后恢复为不可见?

继续使用 AsyncTask

class MyTask extends AsyncTask<Void, Void, Void> {
   private ProgressBar pb;
   public MyTask(ProgressBar pb) {
      this.pb = pb;
   }
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
      pb.setVisibility(View.VISIBLE);
    }
    @Override
    protected Void doInBackground(Void... params) {
      //Your query here.
      return null;
    }
    @Override
    protected void onPostExecute(Void result) {
      super.onPostExecute(result);
      pb.setVisibility(View.GONE);
    }
}
 MyTask mt = new MyTask(pb);
 mt.execute()

但在实际项目中,我建议你使用RoboSpice之类的东西。此外,默认情况下,AsyncTask 不处理活动生命周期。

上级:

有两种方法可以访问 AsyncTask 中的进度条实例:

  1. 只需将其声明为内部类并将进度条保存在外部(主)类的字段中
  2. 通过构造函数传递引用。(请参阅修改后的示例)
在方法

onPostExecute的 AsyncTask 类中,您应该停止进度条

protected void onPostExecute(Long result) {
         pb.setVisibility(View.INVISIBLE);
}

任务完成后调用(在 ui 线程上)

最新更新