Google Drive API - 获取包含文件夹的文件列表

时间:2015-12-04 09:25:58

标签: 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的文件夹,并在此结果中查找文件夹名称。也许这有可能吗?

1 个答案:

答案 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所示。如果您不知道树结构的深度,则需要递归。

祝你好运

相关问题