Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何取消Facebook SDK 3.0的任务?_Android_Facebook_Android Asynctask - Fatal编程技术网

Android 如何取消Facebook SDK 3.0的任务?

Android 如何取消Facebook SDK 3.0的任务?,android,facebook,android-asynctask,Android,Facebook,Android Asynctask,我正在尝试取消一个RequestAsyncTask,当我调用方法cancel时,后台线程不会停止,因为isCancelled方法从未被调用过,我该怎么做?这是我的代码: Request requestUpload = Request.newUploadPhotoRequest(session, imagen, requestCallback); Bundle params = requestUpload.getParameters(); params.putStr

我正在尝试取消一个RequestAsyncTask,当我调用方法cancel时,后台线程不会停止,因为isCancelled方法从未被调用过,我该怎么做?这是我的代码:

Request requestUpload = Request.newUploadPhotoRequest(session, imagen, requestCallback);
        Bundle params = requestUpload.getParameters();
        params.putString("name", "hi everyone");
        requestUpload.setParameters(params);
        rq = Request.executeBatchAsync(requestUpload);
        progressDialog = ProgressDialog.show(getActivity(), "", "Wait please...", true, true, new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                if (rq != null) {
                    rq.cancel(true);                           
                }
            }
        });
有几件事:

首先,我不确定您如何编译该代码,因为我希望rq必须是最终的,以便在匿名OnCancelListener方法中引用。当我在我的环境中复制它时,它肯定是必须的

第二,我不知道你说的是什么意思

因为从未调用isCancelled方法

调用此方法是为了查明任务是否已取消,而不是取消它

第三,我在下面编写了类似的代码,它显示了当使用后退按钮取消对话框时,对isCancelled的调用返回true

最后,编写的代码将无限期地显示进度对话框,而您可能希望在请求完成时将其取消。一种方法是创建RequestAsyncTask的子类,并重写其onPostExecute方法以关闭ProgressDialog

Bundle postParams = new Bundle();
postParams.putString("name", "Name");
postParams.putString("message", "Message");
postParams.putString("picture", imageURL);

Request request = new Request(fbSession, "me/feed", postParams, HttpMethod.POST, postResponseCallback);
final FacebookPostTask task = new FacebookPostTask(request);
task.execute();

facebookPostProgressDialog = ProgressDialog.show(this, "", "Posting to Facebook...", true, true,
    new DialogInterface.OnCancelListener() {
      @Override
      public void onCancel(DialogInterface dialog) {
        if (task != null) {
          task.cancel(true);
          Log.d(MainActivity.TAG, "Task cancelled? " + task.isCancelled());
        }
      }
    });
RequestAsyncTask的子类如下所示:

  private class FacebookPostTask extends RequestAsyncTask {

    public FacebookPostTask(Request... requests) {
      super(requests);
    }

    @Override
    protected void onPostExecute(List<Response> result) {
      super.onPostExecute(result);
      facebookPostProgressDialog.dismiss();
    }

  }
可能有一些更简单的方法可以做到这一点


请注意,即使我成功地取消了任务,FB的帖子似乎仍在继续。这可能取决于我取消任务的速度。

那么,如果我们不能取消任务,那又有什么意义呢??我的特定场景有一个视频正在上传,这需要时间,所以我想给用户一个取消上传的选项。有解决办法吗?