[我想在这里做的-是通过Google Drive Api在驱动器中创建文件,并在文件准备好后检索/还原
我在下面使用此功能创建文件:
private void sendToDrive(File file,String nameFile){
getDriveResourceClient()
.createContents()
.continueWithTask(task -> {
DriveContents contents = task.getResult();
OutputStream outputStream = contents.getOutputStream();
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle(nameFile)
.setStarred(true)
.build();
return getDriveResourceClient().createFile(AppFolder, changeSet, contents);
}).addOnSuccessListener(new OnSuccessListener<DriveFile>() {
@Override
public void onSuccess(DriveFile driveFile) {
Log.e("sendFile","onSuccess");
}
}).addOnCompleteListener(new OnCompleteListener<DriveFile>() {
@Override
public void onComplete(@NonNull Task<DriveFile> task) {
Log.e("sendFile", "OnComplete");
}
});
}
当我为文件调用此函数时,我可以同时看到日志OnComplete和OnSuccess。
但是在此之后,如果我在文件夹中列出文件-我找不到该文件(尤其是大文件时)
我使用这种方法来获取驱动器文件夹中所有文件的列表:
protected void getAllFileFromDrive(){
DriveApi.MetadataBufferResult metadataBufferResult = AppFolder.listChildren(getDriveClient().asGoogleApiClient()).await();
if (!metadataBufferResult.getStatus().isSuccess()) {
metadataBufferResult.release();
}else
{
MetadataBuffer metadataBuffer = metadataBufferResult.getMetadataBuffer();
if (metadataBuffer.getCount() == 0) {
metadataBuffer.release();
}else{
for (int i = 0 ; i < metadataBuffer.getCount(); i++)
{
Metadata item = metadataBuffer.get(i);
if (item==null || item.getOriginalFilename()== null)
continue;
Log.e("File",item.getOriginalFilename());
}
metadataBuffer.release();
metadataBufferResult.release();
}
}
}
但是我在日志中找不到该文件,因此我需要等待一段时间才能看到它。我尝试调用syncRequest,但没有任何改变,我需要等待1分钟或更长时间(如果文件更大)。我可以理解,驱动器正在后台处理我的文件,但我想知道他什么时候完成或等到他完成所有过程。
[我所有的代码都是使用Drive API并在[gradle]中使用implementation 'com.google.android.gms:play-services-drive:17.0.0'
的Android(并且已弃用)。
谢谢。
您知道GDAA为deprecated。
驱动器根据其自己的时间表更新服务器。已经有一段时间了,但是我认为您不能做很多事情来影响这个时间表。我认为延迟是由于云端硬盘上传了文件,而不是后端进行了任何实质性的处理。
如果我没记错的话,可以通过监视completion events来通知上传完成。