我正在使用从 web 服务获取 n 条记录的 web 服务。我正在使用 WS Client 来调用 Web 服务。现在我想要一个进度条,显示已加载的 n 个数据中有多少。有没有可能实现这一目标?我正在使用 AsyncTask 在后台调用 WS。
问问题
2946 次
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 回答