1

我正在使用从 web 服务获取 n 条记录的 web 服务。我正在使用 WS Client 来调用 Web 服务。现在我想要一个进度条,显示已加载的 n 个数据中有多少。有没有可能实现这一目标?我正在使用 AsyncTask 在后台调用 WS。

4

2 回答 2

7

尝试这样的事情,这基本上显示了在异步任务运行时更新进度条的示例

  public class AndroidAsyncTaskProgressBar extends Activity {

 ProgressBar progressBar;
 Button buttonStartProgress;

 public class BackgroundAsyncTask extends
    AsyncTask<Void, Integer, Void> {

  int myProgress;

  @Override
  protected void onPostExecute(Void result) {
   // TODO Auto-generated method stub
   Toast.makeText(AndroidAsyncTaskProgressBar.this,
         "onPostExecute", Toast.LENGTH_LONG).show();
   buttonStartProgress.setClickable(true);
  }

  @Override
  protected void onPreExecute() {
   // TODO Auto-generated method stub
   Toast.makeText(AndroidAsyncTaskProgressBar.this,
         "onPreExecute", Toast.LENGTH_LONG).show();
   myProgress = 0;
  }

  @Override
  protected Void doInBackground(Void... params) {
   // TODO Auto-generated method stub
   while(myProgress<100){
    myProgress++;
    publishProgress(myProgress);
       SystemClock.sleep(100);
   }
   return null;
  }

  @Override
  protected void onProgressUpdate(Integer... values) {
   // TODO Auto-generated method stub
   progressBar.setProgress(values[0]);
  }

 }


 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     buttonStartProgress = (Button)findViewById(R.id.startprogress);
     progressBar = (ProgressBar)findViewById(R.id.progressbar_Horizontal);
     progressBar.setProgress(0);

     buttonStartProgress.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    new BackgroundAsyncTask().execute();
    buttonStartProgress.setClickable(false);
   }});
 }
}
于 2012-05-28T04:17:58.410 回答
1

要执行这种进度更新,您需要使您的 web 服务不完全返回部分结果。和n条记录一样,webservice可以一次返回n/p结果,并使用publishProgress方法通知事件线程任务百分比,postEexcute通知webservice调用和解析完成。

于 2012-05-28T04:22:30.653 回答