Google Drive API - 获取包括文件夹在内的文件列表

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

sea*_*npj 5

正如您在上面的评论中回答的那样(但是您不能匹配名称,您必须匹配 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()”方法所示。如果您不知道树结构有多深,则递归是必要的。

祝你好运