我有一段代码(Java(来列出个人Google应用程序域上一个组的所有members
。这使用谷歌目录API。
以下是片段:
public static void listMembers(String groupKey,Directory service) throws IOException {
Members res = service.members().list(groupKey).execute();
List<Member> members = res.getMembers();
int count = 0;
if (members == null || members.size() == 0) {
System.out.println();
System.out.println("No members found.");
} else {
System.out.println();
System.out.println("Members of "+groupKey);
for (Member member : members) {
count++;
System.out.println(member.getEmail());
}
System.out.println(count);
}
}
这很好,但对于任何组,列出的exactly 200 members
都不超过,尽管一个组实际上有更多的用户。我试图在我正在使用的members.list()
函数上搜索限制,但在目录API的Google文档中找不到。有这样的限制吗?如果是,我能以某种方式列出所有用户吗?
看看members.list((上的maxResults和pageToken属性。页面没有指定,但我相信200既是maxResults的默认值,也是最大值。您的应用程序需要检查结果中是否存在pageToken属性。如果设置好了,您至少还有一页结果要获取。在结果中保持循环,直到未设置pageToken。
我修改了代码以使用pageToken
属性,如下所示:
public static void listMembers(String groupKey,Directory service) throws IOException {
Directory.Members.List res = service.members().list(groupKey);
Members mbrs;
List<Member> members ;
int count = 0;
String pageToken;
do{
mbrs = res.execute();
members = mbrs.getMembers();
System.out.println();
System.out.println("Members of "+groupKey);
for (Member member : members) {
count++;
System.out.println(member.getEmail());
}
pageToken = mbrs.getNextPageToken();
//System.out.println(res.getPageToken()); //The first pageToken of any Directory.Members.List is null.
res.setPageToken(pageToken);
System.out.println(count);
}while(pageToken!=null);
}
我想补充一点,任何Directory.Members.List的第一个pageToken都为null。可以通过将while循环的条件从pageToken!=null
更改为true
来验证这一点。此更改将反复列出所有成员。