java AsyncTask处理另一个类接收到的消息并更新进度
我的问题是
我有一个工作正常的AsyncTask,在doInBackground()上它调用了一个新类,该类使用REST服务将我的数据同步到web服务。我没有一个唯一的类,因为我需要对不同的活动进行相同的内容同步,这样做更简单
我需要的是,在同步过程中,我可以获得“联系人”的数量,每次下载联系人时,从“联系人”长度中删除1个,因此,我需要在进度对话框中显示联系人的长度,并在每次下载新的“联系人”时刷新
以下是我的异步任务代码:
public class syncContentTask extends AsyncTask<String, String, Boolean> {
private ProgressDialog mprogress;
private Context context;
//token for JSON header to authenticate
String authToken;
public syncContentTask(Context cxt, String token) {
this.context = cxt;
mprogress = new ProgressDialog(context);
authToken = token;
}
protected void onPreExecute() {
mprogress = ProgressDialog.show(context, "Sync", "Sync in progress...");
}
@Override
protected Boolean doInBackground(String... params) {
syncData syncData = new syncData();
syncData.syncData(context, authToken);
publishProgress(progress);
return true;
}
protected void onProgressUpdate(String... progress) {
//mprogress.setProgress(Integer.parseInt(progress[0]));
}
protected void onPostExecute(Boolean result) {
if (result) {
mprogress.dismiss();
}
}
}
在Sync Data类中,我有处理HttpRequest和数据库内容的函数
有人能帮忙吗
# 1 楼答案
您需要为数据进度创建一个侦听器,并让它更新进度栏。现在看起来是这样的:
在完成之前,不会向进度指示器提供任何更新。所以,你需要这样的东西:
在您的侦听器中,有
myListener.downloadStarted()
、myListener.updateProgressBar(int progress)
和myListener.downloadCompleted()
等回调方法,syncData类会在下载过程中调用这些方法例如:
然后创建一个侦听器类:
然后在这个例子中,您需要可运行的程序(startScan、scanComplete和updateScanProgress)来执行UI任务,比如更新进度条。在您的情况下,您可能还想加载一些结果,等等
然后在你的任务中:
假设SDScanListener类和AsyncTask都在您的活动中。此外,SyncData Cals需要在实例化时设置一个SDScanListener变量。然后,当它执行其工作时,会调用侦听器方法,如:
在进行过程中,它会调用其他方法(并传入相应的参数)