我成功创建了多张照片上传器。它按计划运作。除非我希望能够在需要时取消上传。
我知道如果我需要取消它,我可以在AsyncTask上调用cancel()
。
我想要做的是在我的照片上传对象中保留对AsyncTask的引用,因此可以在必要时引用它来取消。
执行以下操作,但我无法获得对异步任务的引用。
UploadItem item = new UploadItem();
item.setItemFilePath(imageLocation);
item.setTaskIdentifier(UUID.randomUUID().toString());
new UploadTask().execute(item);
但是如果我需要取消它,我想保留对该任务的引用。所以我做了类似的事情,但它崩溃了应用程序。
//Create new upload item
UploadItem item = new UploadItem();
item.setItemFilePath(imageLocation);
item.setTaskIdentifier(UUID.randomUUID().toString());
item.setAsyncTask(new UploadTask());
//Start the upload
item.getAsyncTask().execute(this);
如何在自定义对象中保留对异步任务的引用?
我的自定义上传对象。
public class UploadItem implements Serializable {
public AsyncTask mAsyncTask;
public String itemFilePath = "";
public String taskIdentifier = "";
public boolean isUploading = false;
public AsyncTask getAsyncTask() {
Log.d("Upload Item", "Getting upload task");
return mAsyncTask;
}
public void setAsyncTask(AsyncTask asyncTask) {
Log.d("Upload Item", "Setting upload task");
this.mAsyncTask = asyncTask;
}
public String getItemFilePath() {
return itemFilePath;
}
public void setItemFilePath(String itemFilePath) {
this.itemFilePath = itemFilePath;
}
public boolean isUploading() {
return isUploading;
}
public void setUploading(boolean uploading) {
isUploading = uploading;
}
public String getTaskIdentifier() {
return taskIdentifier;
}
public void setTaskIdentifier(String taskIdentifier) {
this.taskIdentifier = taskIdentifier;
}
}
后台任务:
public class UploadTask extends AsyncTask<UploadItem, Integer, HashMap<String, String>> {
@Override
protected void onPreExecute() { }
@Override
protected void onProgressUpdate(Integer... values) { }
@Override
protected void onPostExecute(HashMap<String, String> r) { }
}