我创建了一个AsyncTask来上传或下载我的Google云端硬盘上的文件。
这是我上传文件的一部分代码的示例:
public class AsyncUpload extends AsyncTask<String, String, String>{
Context c;
public AsyncUpload(Context c) {
super();
this.c = c;
}
@Override
protected String doInBackground(String... params) {
try{
// File's binary content
java.io.File fileContent = new java.io.File(localFilePath);
InputStreamContent mediaContent = new InputStreamContent(FileInfo.getMime(localFilePath), new BufferedInputStream(new FileInputStream(fileContent)));
mediaContent.setLength(fileContent.length());
// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType(FileInfo.getMime(localFilePath));
if(parentId!=null){
ParentReference parent = new ParentReference();
parent.setId(parentId);
body.setParents(Arrays.asList(parent));
}
Drive.Files.Insert request = drive.files().insert(body, mediaContent);
MediaHttpUploader uploader = request.getMediaHttpUploader();
uploader.setDirectUploadEnabled(false);
uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);
uploader.setProgressListener(mediaHttpUploaderProgressListener);
File file = request.execute();
if (file != null) {
Log.i(TAG,"File Uploaded");
isAttempt=false;
return file;
}
} catch (IOException e) {
Log.e(TAG,"IOEXCEPTION Message:n"+e.getMessage());
}
return null;
}
}
这段代码运行良好,但我不知道如何在上传文件(或使用类似代码下载)时停止它!
请帮帮我!
非常感谢
试试这个:异步任务实例上的第一个调用取消方法
findViewById(R.id.cancelButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mTask.cancel(true);
}
});
然后,您需要添加检查您的异步任务是否已取消:
@Override
protected String doInBackground(String... params) {
try{
// File's binary content
java.io.File fileContent = new java.io.File(localFilePath);
final FileInputStream fileStream = new FileInputStream(fileContent);
InputStreamContent mediaContent = new InputStreamContent(FileInfo.getMime(localFilePath), new BufferedInputStream(fileStream));
....
uploader.setProgressListener(new MediaHttpUploaderProgressListener() {
void progressChanged(MediaHttpUploader uploader) {
if(isCancelled()) {
// could not find another way to cancel transferring except that:
fileStream.close();
}
else {
mediaHttpUploaderProgressListener(uploader);
}
}
});
....
} catch (IOException e) {
Log.e(TAG,"IOEXCEPTION Message:n"+e.getMessage());
}
return null;
}
希望这会起作用。
必须添加以下内容 - 这不是实现传输操作的"正确"方法。请记住,您的活动可能会停止甚至销毁,然后在任务工作时再次创建。事件 更糟糕的事情可能会发生。运行 AsyncTask 无法防止在系统内存不足时销毁整个应用,而如果您的应用在前台没有任何活动,则传输仍在进行。在这种情况下,转移甚至可能无法完成。
最好考虑将传输操作移动到专用服务组件。
如果您取消 AsyncTask,则您的下载和上传将自动取消
if(mTask!=null) mTask.cancel();
谢谢