【问题标题】:Why does my query by title not find manually created files/folders为什么我的标题查询找不到手动创建的文件/文件夹
【发布时间】:2021-12-01 13:04:29
【问题描述】:

我正在 Android SDK for Google Drive 上运行查询,以检查具有特定名称的目录是否存在或创建它(目录名称是 Google Drive 上的资源标题)。

我在使用以下代码时遇到的问题是它永远找不到我的文件夹并且每次都创建一个新文件夹,我不知道为什么。如果是 SDK 自己创建的,它会成功找到该目录。

public static final String FOLDER_NAME_CORE = "My Core Folder";

MetadataBuffer meta = Drive.DriveApi.query(mGoogleApiClient, new Query.Builder()
            .addFilter(Filters.eq(SearchableField.TRASHED, false))
            .addFilter(Filters.eq(SearchableField.TITLE, FOLDER_NAME_CORE ))
            .setSortOrder(new SortOrder.Builder().addSortDescending(SortableField.MODIFIED_DATE).build())
.build()).await().getMetadataBuffer();

if (metadataBufferResult.getCount() > 0) {
    Log.d(TAG, "Creating new folder"); 
    ...
} else {
    Log.d(TAG, "Using existing folder");
}

我已尝试公开共享该文件夹,但它没有改变任何东西(如预期的那样)。有谁知道我必须改变什么才能让它找到现有的文件夹?据我所知this list 是唯一可能的搜索选项。

【问题讨论】:

    标签: android google-drive-api google-drive-android-api


    【解决方案1】:

    希望您了解支持的scopes
    我认为有两件事会导致您的问题,您将不得不重新考虑您的应用程序的逻辑。

    首先,GDAA(与 REST Api 不同)引入了一些延迟,因此文件/文件夹可能暂时不存在于 Drive 上,即使您获得了 DriveId(请参阅 this)。

    其次,您使用 TITLE 作为存在指标这一事实在 GooDrive 世界中不起作用,因为 TITLE 不是唯一的(您已经知道这一点)。

    我会推荐这种方法:

    1. 当您的(基于 GDAA 的)应用程序创建文件/文件夹时,等到您获得它的 ResourceId。这证实了它的存在(再次here)。
    2. 始终使用其 ResourceId(转换为 DriveId)检查 Drive 中是否存在文件/文件夹

    【讨论】:

    • 谢天谢地,我在整个应用程序中都使用了 ResourceId,因为它比 DriveId 更统一(ResourceId 匹配共享链接)。这实际上仅适用于我按标题查找以获取该 ResourceId 的新安装。我没有意识到查询结果是 SDK 强制执行的,我以为我犯了一个错误。感谢您清理它!
    • 只是一个“提醒”,DriveId 在 GooPlaySvcs 实例(一个设备)之外毫无用处。它甚至会在其生命周期内发生变化 (Daniel's comment here)。不要缓存它,不要发布它。
    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多