【问题标题】:Google Drive Android Api Completion Event for Folder Creation用于创建文件夹的 Google Drive Android Api 完成事件
【发布时间】:2015-12-16 17:20:57
【问题描述】:

Google Drive Android Api (GDAA) 中的completion events 似乎只能通过内容更改(文件创建、文件内容更新)调用。由于我需要获取一个文件夹的Resource Id(seen here for a file with contents),参考这个方法:

   DriveFolder.createFolder(mGAC, meta).setResultCallback(...);

我需要一个完成事件来创建文件夹,但我找不到解决方案。

有什么提示吗?谢谢。

【问题讨论】:

  • 我认为完成事件只适用于DriveFile 而不是DriveFolder。创建文件夹后获得DriveFolderResultResultCallback 就足够了吗?创建文件夹后,您应该可以检查它是否成功(参见onResult)。
  • 不,您获得了“初步”DriveId(参见here),它产生的 ResourceId 为 null。这意味着您将在提交(上传)之前获得由本地 GooPlaySvcs 创建的 DriveId。我正在研究一个 hack,如果没有其他人上钩,我会发布结果。

标签: google-drive-android-api


【解决方案1】:

不,这个问题的接受者,所以我认为没有直接的解决方案。与此同时,我拼凑了一个黑客,直到这个问题得到解决(如果有的话)。

1/ 创建一个文件夹,您将获得 YIELDS NO ResourceId(未提交任何内容)的“初步”DriveId。

2/ 将此 DriveId 用作带有虚拟内容和附加完成事件请求的虚拟文件的父级。文件夹创建现在显然是由它的孩子强制创建的。

3/ 在完成事件 (as seen here) 中,获取虚拟文件的 DriveId 并检索其父 ID:

  com.google.android.gms.common.api.GoogleApiClient GAC;   
  //...   
  DriveId parentID(DriveId dId) {
    MetadataBuffer mdb = null;
    DriveApi.MetadataBufferResult mbRslt = dId.asDriveResource().listParents(GAC).await();
    if (mbRslt.getStatus().isSuccess()) try {
      mdb = mbRslt.getMetadataBuffer();
      if (mdb.getCount() > 0)
        return mdb.get(0).getDriveId();
    } catch (Exception e) { e.printStackTrace();}
    finally {
      if (mdb != null) mdb.close();
    }
    return null;   
  }

('await()' 风格在这里有效,因为 'DriveEventService' 已关闭 UI)

现在您获得了文件夹的“真实”DriveId,它可以生成有效的 ResourceId:

String resourceId = driveId.getResourceId()

4/ zap 完成其终生任务的虚拟文件

有没有更好的解决方案?请告诉我。

【讨论】:

  • 我也遇到过同样的情况,你找到更好的解决方案了吗?如果没有,您能否解释一下如何从完成事件中访问数据?例如 GAC?它是如何访问的?你需要一个 context\activity 来创建它
  • @DanielKatzan 对不起,我半年前退休了,不再活跃于此,我可能会在未来的某个时候回到它(当谷歌最终稳定下来时 - 或杀死它:-)跨度>
猜你喜欢
  • 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
相关资源
最近更新 更多