如果我们想将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。
答案 0 :(得分:1)
您可以设置pageSize以限制返回的行数。
无法像在SQL中那样进行分组或区分。如果您有相同名称的文件,那么您将获得所有文件。
我唯一能想到的就是添加一个orderBy
orderBy string
以逗号分隔的排序键列表。有效密钥是 'createdTime','folder','modifiedByMeTime','modifiedTime','name', 'quotaBytesUsed','recency','sharedWithMeTime','starred'和 'viewedByMeTime'。默认情况下,每个键按升序排序,但可能是 用'desc'修饰符反转。用法示例: ?orderBy = folder,modifiedTime desc,name。请注意,有一个 大约有一百万个文件的用户的当前限制 请求的排序顺序被忽略。
然后按照您现在所做的'modifiedTime'排序。然后,您可以在本地处理重复项。