【问题标题】:members.list() in Google Admin SDK Directory API (Java)Google Admin SDK Directory API (Java) 中的 members.list()
【发布时间】:2015-09-23 11:38:28
【问题描述】:

我有一段代码(用 Java 编写)列出个人 Google Apps 域上某个组的所有 members。这使用了 google Directory API。

这里是sn-p:

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() 函数的限制,但在 Google 目录 API 文档中找不到它。有没有这样的限制?如果是,我可以以某种方式列出所有用户吗?

【问题讨论】:

    标签: java google-api google-api-java-client google-admin-sdk google-directory-api


    【解决方案1】:

    我已经修改了代码以使用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 都是空的。可以通过将 while 循环的条件从 pageToken!=null 更改为 true 来验证这一点。此更改将一遍又一遍地列出所有成员。

    【讨论】:

      【解决方案2】:

      查看members.list() 上的 maxResults 和 pageToken 属性。该页面没有指定,但我相信 200 是 maxResults 默认值和最大值。您的应用需要检查结果中是否存在 pageToken 属性。如果已设置,您至少可以再获取一页结果。继续循环遍历结果,直到没有设置 pageToken。

      【讨论】:

        猜你喜欢
        • 2013-11-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 2019-02-10
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多