在正在上载的对象中保留对AsyncTask的引用

时间:2017-05-04 13:18:42

标签: java android android-asynctask

我成功创建了多张照片上传器。它按计划运作。除非我希望能够在需要时取消上传。

我知道如果我需要取消它,我可以在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) { }

    }

0 个答案:

没有答案