如何仅返回Google云端硬盘中的第一个结果?

时间:2017-03-29 10:55:56

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

如果我们想将Google云端硬盘与GoogleDriva Android API一起使用,我们会进行查询以检索符合我们条件的所有文件。多个文件可以具有相同的名称,因为名称不是唯一标识符。 DriveId是。但有时我们只对最新文件感兴趣。通常的方式(来自谷歌网站)是这样的。

void retrieveFiles() {
    SortOrder sortOrder = new SortOrder.Builder()
        .addSortDescending(SortableField.MODIFIED_DATE)
        .build();
    Query query = new Query.Builder()
        .addFilter(Filters.eq(SearchableField.TITLE, filename), "my_filename.txt"))
        .setSortOrder(sortOrder)
        .build();
    MetadataBufferResult mbr = Drive.DriveApi.query(query).await().getMetadataBuffer();

    // Now we can iterate through all the result hits
    Metadata metadata;
    Iterator<Metadata> iterator = mbr.getMetadataBuffer().iterator();
    metadata = iterator.next();  // get the first hit
});

此查询返回符合条件的所有文件的元数据。但是,将搜索限制为第一个文件(或任意数量的文件)是有用的,因为这是我们感兴趣的。排序使我们能够修剪结果。 有没有办法将结果集限制为?有点像SQL中的TOP N ROWS。

1 个答案:

答案 0 :(得分:1)

您可以设置pageSize以限制返回的行数。

无法像在SQL中那样进行分组或区分。如果您有相同名称的文件,那么您将获得所有文件。

我唯一能想到的就是添加一个orderBy

  

orderBy string
以逗号分隔的排序键列表。有效密钥是   'createdTime','folder','modifiedByMeTime','modifiedTime','name',   'quotaBytesUsed','recency','sharedWithMeTime','starred'和   'viewedByMeTime'。默认情况下,每个键按升序排序,但可能是   用'desc'修饰符反转。用法示例:   ?orderBy = folder,modifiedTime desc,name。请注意,有一个   大约有一百万个文件的用户的当前限制   请求的排序顺序被忽略。

然后按照您现在所做的'modifiedTime'排序。然后,您可以在本地处理重复项。