【问题标题】:google drive api for android delay retrieve created filegoogle drive api for android延迟检索创建的文件
【发布时间】: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


    【解决方案1】:

    你知道 GDAA 是deprecated

    驱动器根据自己的时间表更新服务器。已经有一段时间了,但我不认为你可以做很多事情来影响那个时间表。我的想法是延迟是由于云端硬盘上传您的文件而不是后端的任何真正重要的处理。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多