新的 Google Drive Android API (GDAA) 中报告的已删除文件状态不可靠

2024-01-12

自从新的 Google Drive Android Api (GDAA) 推出以来,这个问题就一直困扰着我。 第一的在这里讨论 http://github.com/googledrive/android-demos/issues/3,我希望它会在以后的版本中消失,但它仍然存在(截至 2014/03/19)。用户删除的文件/文件夹(指“drive.google.com”中的“删除”操作)继续出现在

  Drive.DriveApi.query(_gac, query), and  
  DriveFolder.queryChildren(_gac, query)

  DriveFolder.listChildren(_gac)

方法,即使与

  Filters.eq(SearchableField.TRASHED, false)

查询限定符,或者如果我对结果使用过滤构造

for (Metadata md : result.getMetadataBuffer()) {
  if ((md == null) || (!md.isDataValid()) || md.isTrashed()) continue;
  dMDs.add(new DrvMD(md));
}

Using

  Drive.DriveApi.requestSync(_gac);

没有影响。自移除以来所经过的时间差别很大,我的最后一个案例已经超过 12 小时了。而且它是完全随机的。

更糟糕的是,我什至不能依赖“drive.google.com”中的 EMPTY TRASH,它不会产生任何可预测的结果。有时文件状态会更改为“isTrashed()”,有时会从结果列表中消失。

当我不断摆弄这个问题时,我最终得到了以下超级可怕的黑客:

find file with TRASH status equal FALSE 
if (file found and is not trashed) {
  try to write content
  if ( write content fails)
    create a new file
}

即使这样也没有帮助。即使文件位于垃圾箱中,该文件也显示为正常(并且其状态通过查询和元数据测试进行了双重过滤)。它甚至可以愉快地写入,当在垃圾箱中检查时,它会被修改。

这里的结论是修复应该获得更高的优先级,因为它会使 Drive 的多平台使用变得不可靠。它会在开发/调试过程中立即被开发人员发现,并引导他们离开。


在等待来自任何人的确认时支持团队 https://developers.google.com/drive/support,我设计了一个 HACK 来解决这个问题。使用与中相同的原理SO 22295903 https://stackoverflow.com/questions/22295903/how-to-delete-a-file-on-google-drive-using-google-drive-android-api,逻辑涉及回退到 RESTful API。基本上,放弃列表/查询GDAA 的功能。

高级逻辑是:

  1. 查询 RESTful API 以检索相关文件的 ID
  2. 使用检索到的 ID 通过“fetchDriveId()”获取 GDAA 的 DriveId

以下是记录该过程的代码片段:

1/初始化两个GDAA'GoogleApiClient'和 RESTful 的'服务.驱动器.驱动器'

GoogleApiClient _gac;
com.google.api.services.drive.Drive _drvSvc;

void init(Context ctx, String email){
  // build GDAA  GoogleApiClient
  _gac = new GoogleApiClient.Builder(ctx).addApi(com.google.android.gms.drive.Drive.API)
    .addScope(com.google.android.gms.drive.Drive.SCOPE_FILE).setAccountName(email)
    .addConnectionCallbacks(ctx).addOnConnectionFailedListener(ctx).build();
  // build RESTFul (DriveSDKv2) service to fall back to  
  GoogleAccountCredential crd = GoogleAccountCredential
  .usingOAuth2(ctx, Arrays.asList(com.google.api.services.drive.DriveScopes.DRIVE_FILE));
  crd.setSelectedAccountName(email);
  _drvSvc = new com.google.api.services.drive.Drive.Builder(
                       AndroidHttp.newCompatibleTransport(), new GsonFactory(), crd).build();
}

2/ 查询 Drive RESTful API 的方法,返回 GDAA 的 DriveId 以供应用程序使用。

String qry = "title = 'MYFILE' and mimeType = 'text/plain' and trashed = false";
DriveId findObject(String qry) throws Exception {
  DriveId dId = null;
  try {
    final FileList gLst = _drvSvc.files().list().setQ(query).setFields("items(id)").execute();
    if (gLst.getItems().size() == 1) {
      String sId = gLst.getItems().get(0).getId();
      dId = Drive.DriveApi.fetchDriveId(_gac, sId).await().getDriveId();
    } else if (gLst.getItems().size() > 1)
      throw new Exception("more then one folder/file found");
  } catch (Exception e) {}
  return dId;
}

上面的 findObject() 方法(为了简单起见,我再次使用“await()”风格)正确返回 Drive 对象,反映已废弃的状态,没有明显的延迟(在非 UI 线程中实现)。

再次,我强烈建议不要将其保留在代码中超过必要的时间,因为它是一种 HACK,会对系统的其余部分产生不可预测的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新的 Google Drive Android API (GDAA) 中报告的已删除文件状态不可靠 的相关文章

随机推荐

  • 如何防止恶意使用我的套接字?

    我正在制作一个基于玩家能够邀请其他玩家参加聚会的网页 以及其他需要等待的事情 我有你们队伍中聊天 用户的基本发送 接收 更新 唯一的问题是 如何阻止某人坐在那里打开开发者控制台并继续 socket emit updateUsers Wein
  • Python 3.2 空闲与终端

    在 OSX 下的 python 3 2 中 如果我在 Idle 下运行 type sys stdin 我会得到一个奇怪的答案 如下所示 gt gt gt type sys stdin
  • 从 AVPlayer 中当前播放的视频中录制流音频

    很多类似的问题 但并不完全相同 我目前的代码设置是通过 AVPlayer 播放视频 我想要做的是以某种方式提取流视频的音频并最终与麦克风输入合并 使用 AVAudioMixer 想想卡拉 OK 应用程序 因此当用户播放录音时 它将仅播放视频
  • Express js 中允许多个 CORS 域

    如何以简化的方式允许 Express 中的 CORS 多个域 I have cors origin www one com app all function req res next res header Access Control Al
  • 如何释放 WebAssembly 中公开的 Rust 代码分配的内存?

    我有一个用 Rust 和 wasm bindgen 编写的 Web 应用程序 需要存储状态 状态存储如下 lazy static static ref ID TO DATA Mutex
  • UICollectionView PerformBatchUpdates:动画所有部分

    我正在写一个自定义UICollectionViewFlowLayout我注意到initialLayoutAttributesForAppearingItemAtIndexPath and initialLayoutAttributesFor
  • 变得致命:肮脏的存储库:有未提交的更改。使用 git ftp push 退出管道

    我有一个管道设置 可以自动处理 构建 CSS 文件 有时我在执行时会遇到此错误git ftp push 致命 肮脏的存储库 有未提交的更改 正在退出 bitbucket pipelines yml image php 7 2 7 pipel
  • 如何从 webviewclient 打开拨号器活动?

    我正在使用 webviewclient 打开 html 页面 html 页面有一个锚标记 当我单击锚标记时 应该启动我的电话拨号器活动 当我在外部浏览器 android 默认浏览器 中单击此锚标记时 它正在启动电话拨号器 但因为我正在使用
  • 在标题中使用 WordPress 短代码

    我有一些短代码可以在 WordPress 帖子或页面中正常工作 我可以在functions php中添加什么东西来使短代码能够在WordPress帖子标题中工作吗 您可以尝试在标题中添加过滤器functions php文件如 add fil
  • Control.Select() 和 Control.Focus() 有什么区别?

    在 WinForms 中 要将焦点设置到特定控件 我似乎总是最终调用Control Select and Control Focus 让它发挥作用 有什么区别 这是正确的方法吗 Focus 是实际设置焦点的低级函数 Select 是一个更高
  • 更新 Snowflake 中的混合嵌套对象

    我有一个雪花表 其中有一个变体列 raw 该表中的每一行都是复杂的 字典和数组 并且是嵌套的 多个层次结构 我想做的是能够更新specific某个数组中的项目 使用示例会更容易理解它 因此将其视为表中的一行 id 1234 x id y i
  • 最喜欢的性能调整技巧[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • RoboScript 无法在 Firebase Testlab 中单击“启用位置确定”按钮

    我正在尝试在 Firebase TestLab 上使用 RoboScript 测试基于 Google 地图的 Android 应用程序 默认情况下 TestLab 设备上禁用位置 要启用它们 我们需要模拟单击系统提示上的 确定 按钮 但这种
  • 为什么说TCP/IP协议族中的IP协议是无连接的?

    为什么IP被称为无连接协议 如果是的话 那么面向连接的协议是什么 Thanks 更新 1 20 21 2010 12 26 我认为 为了更好地回答我的问题 最好从物理上和逻辑上解释 连接 的实际含义 更新 2 9 59 AM 2 1 201
  • 如何反序列化具有重复键的 JSON 而不丢失任何值?

    我正在尝试反序列化一些具有重复键的 JSON 并且它们可能有任意数量 JSON 看起来像这样 abilities ability id 5134 ability level 3 ability id 5136 ability level 3
  • 带有自定义分隔符的 Angularjs 静态数字过滤器

    如何将 Angularjs 数字过滤器中的分隔符从逗号更改为自定义的分隔符 Now price number 回报1 000 00 我需要像这样1 000 00 我到底需要如何重写内置角度过滤器 您不必弄乱 Angular 源代码或将语言环
  • Selenium Grid 支持 Selenium 2?

    我读到计划在 2010 年年底为 Selenium 2 0 提供 Selenium Grid 支持 显然这还没有发生 有人知道这方面的任何更新吗 Selenium Grid 2 支持 Selenium 2 并向后兼容 Selenium 1
  • Elasticsearch 中的多个分组依据

    我需要使用 ES 中的 3 个字段进行聚合 分组 我可以在 1 个查询中执行此操作 还是需要对每一列使用构面 迭代 谢谢 从1 0版本开始ElasticSearch 新的聚合 API http www elasticsearch org g
  • 带有线程的“正在工作,请稍等”屏幕?

    也许 这对你来说很容易 但我正在努力开发一个项目 出于教育目的 该项目使用 TADSISearch 组件查询 adsi 持续了几天 当 TADSISearch 搜索 Active Directory 时 我试图在 Form2 上显示 正在工
  • 新的 Google Drive Android API (GDAA) 中报告的已删除文件状态不可靠

    自从新的 Google Drive Android Api GDAA 推出以来 这个问题就一直困扰着我 第一的在这里讨论 http github com googledrive android demos issues 3 我希望它会在以后