Android 如何取消Facebook SDK 3.0的任务?
我正在尝试取消一个RequestAsyncTask,当我调用方法cancel时,后台线程不会停止,因为isCancelled方法从未被调用过,我该怎么做?这是我的代码: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
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的帖子似乎仍在继续。这可能取决于我取消任务的速度。那么,如果我们不能取消任务,那又有什么意义呢??我的特定场景有一个视频正在上传,这需要时间,所以我想给用户一个取消上传的选项。有解决办法吗?