【发布时间】:2020-05-21 12:31:53
【问题描述】:
我在这里尝试做的是通过 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分钟或更长时间(如果文件更大)。 我可以理解驱动器正在后台处理我的文件,但我想知道他何时完成或等到他完成所有过程。
我的所有代码都适用于 Android,在我的 gradle 中使用带有 implementation 'com.google.android.gms:play-services-drive:17.0.0'
的 Drive API(并且已弃用)。
谢谢。
【问题讨论】:
标签: java android google-drive-api drive