我需要列出用户驱动云中的所有图片。
我使用https://www.googleapis.com/drive/v2/files和正确的过滤器来查询所有图片。我需要在文件夹中将结果分组到我的应用程序中。我知道一个文件可以有多个父母,没关系。
我希望避免使用第一次调用中的父ID,通过https://developers.google.com/drive/v2/reference/files/get制作和调用(对于每个文件一次调用)来获取文件夹。
是否有一种网络友好的方式来获取包含文件夹的所有文件?
修改
一个简单的解决方案是在一个查询中获取所有带有id的文件夹,并在此结果中查找文件夹名称。也许这有可能吗?
答案 0 :(得分:2)
正如您在上面的评论中回答的那样(但您无法匹配名称,您必须匹配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;
}
第2步:解析生成的ArrayList以构建树结构(匹配ParentIds,处理多个父项)
第3步:对于具有mime类型“”image / jpeg“,”image / png“,...”无论img mimetype“的文件执行相同操作(只需修改上面的代码即可获取)文件)并再次解析。
当然'execute()'方法会产生应该按指出here处理的异常。
...你可以采用'不那么网络友好'的方法来迭代文件夹树,如'testTree()'方法here所示。如果您不知道树结构的深度,则需要递归。
祝你好运