簡體   English   中英

如何取消RequestAsyncTask Facebook SDK 3.0?

[英]How cancel RequestAsyncTask Facebook SDK 3.0?

我正在嘗試取消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帖子似乎也已經進行了。 這可能只是我取消的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM