pro*_*m85 3 android google-drive-api google-drive-android-api
我需要列出用户驱动器云中的所有图像。
我使用 https://www.googleapis.com/drive/v2/files和正确的过滤器来查询所有图像。我需要将应用程序中的结果分组到文件夹中。我知道一个文件可以有多个父文件,这很好。
我想避免使用第一次调用中的父 ID通过https://developers.google.com/drive/v2/reference/files/get进行调用(对于每个单个文件一个调用)来获取文件文件夹。
是否有一种网络友好的方式来获取文件夹中包含的所有文件?
编辑
一种简单的解决方案是在一个查询中获取具有 id 的所有文件夹,并在此结果中查找文件夹名称。也许这有可能吗?
正如您在上面的评论中回答的那样(但是您不能匹配名称,您必须匹配 ID;名称不是唯一的)。
第 1 步:一次性获取所有文件夹(分页结果、过滤不需要的字段、跳过已删除的字段):
private static Drive mGOOSvc;
....
static ArrayList<ContentValues> getFolders() {
ArrayList<ContentValues> cvs = new ArrayList<>();
if (mGOOSvc != null) try {
Drive.Files.List qry = mGOOSvc.files().list()
.setQ("mimeType = 'application/vnd.google-apps.folder'")
.setFields("items(id,labels/trashed,parents/id,title),nextPageToken");
String npTok = null;
if (qry != null) do {
FileList gLst = qry.execute();
if (gLst != null) {
for (File gFl : gLst.getItems()) {
if (gFl.getLabels().getTrashed()) continue;
for (ParentReference parent : gFl.getParents())
cvs.add(newContentValues(gFl.getTitle(), gFl.getId(), parent.getId()));
}
npTok = gLst.getNextPageToken();
qry.setPageToken(npTok);
}
} while (npTok != null && npTok.length() > 0);
} catch (Exception e) { /* handle Exceptions */ }
return cvs;
}
Run Code Online (Sandbox Code Playgroud)
步骤2:解析生成的ArrayList以构建树结构(匹配ParentIds,处理多个父级)
步骤 3:对 mime 类型为“image/jpeg”、“image/png”、...“whatever img mimetype”的文件执行相同操作(只需修改上面的代码以获取文件)并再次解析。
当然,“execute()”方法会产生异常,应按照此处指出的方式进行处理。
...并且您可以采用“不太网络友好”的方法来迭代文件夹树,如此处的“testTree()”方法所示。如果您不知道树结构有多深,则递归是必要的。
祝你好运
归档时间: |
|
查看次数: |
3118 次 |
最近记录: |