带有'setFields()'修饰符的RESTful API列表文件会产生意外结果

时间:2014-06-15 12:02:10

标签: google-drive-android-api google-drive-api

在Android应用中,我尝试使用 RESTful API 列出云端硬盘中的文件。

https://developers.google.com/drive/v2/reference/files/list

我在Google云端硬盘中有332个(仅限于数字)文件,我运行以下代码段(直接从上面的文档中获取),尝试列出它们:

  private com.google.api.services.drive.Drive _svc;
  ...
  Files.List rqst = _svc.files().list(); //.setFields("items(title, id)").setMaxResults(90); 
  do try {
    FileList list = rqst.execute();
    Log.i("TAG", "count: " + list.getItems().size());
    rqst.setPageToken(list.getNextPageToken());
  } catch (IOException e) { rqst.setPageToken(null); }
  while (rqst.getPageToken() != null && rqst.getPageToken().length() > 0);

如果我使用普通请求:

  _svc.files().list();

循环按预期生成分页结果,即 100 + 100 + 100 + 32 个文件

添加其他修饰符:

  _svc.files().list().setFields("items(title, id)");

只给出了100个结果的第一页。 ' getNextPageToken()'产生NULL,表示没有更多可用数据。

有人说使用“ setMaxResults()”修饰符会产生相同的结果。例如,如果我添加' setMaxResults(90)',

_svc.files().list().setMaxResults(90);

生成90 + 90 + 90 + 62 = 332个文件,但

_svc.files().list().setMaxResults(90).setFields("items(title, id)");

只能生成90个文件,不再有可用的页面。

我假设我一定做错了,因为我发现我不太可能在一个界面中发现一个从未报告过的bug(经过几个小时的谷歌搜索) 现在已经很久了。

1 个答案:

答案 0 :(得分:2)

您需要将nextPageToken请求为您要接收的字段之一。否则,它将显示为null,因为它未包含在响应中。