Android的Google驱动器api延迟检索创建的文件

问题描述 投票:0回答:1

[我想在这里做的-是通过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(并且已弃用)。

谢谢。

java android google-drive-api drive
1个回答
0
投票

您知道GDAA为deprecated

驱动器根据其自己的时间表更新服务器。已经有一段时间了,但是我认为您不能做很多事情来影响这个时间表。我认为延迟是由于云端硬盘上传了文件,而不是后端进行了任何实质性的处理。

如果我没记错的话,可以通过监视completion events来通知上传完成。

© www.soinside.com 2019 - 2024. All rights reserved.