注册

新版的SDK,究竟该怎么获取群组的成员列表?

需求:有一个群组的详情界面,我在这个界面需要展示出已经加入了群组的成员,也就是要拿到群组成员列表.
 
查阅开发文档,使用如下方法:
List memberList = new ArrayList<>();
EMCursorResult result = null;
final int pageSize = 20;
do {
result = EMClient.getInstance().groupManager().fetchGroupMembers(groupId,
result != null ? result.getCursor() : "", pageSize);
memberList.addAll(result.getData());
} while (result.getData().size() == pageSize);
 
 
报错:
05-02 17:34:25.179 24720-27635/com.onion W/System.err: com.hyphenate.exceptions.HyphenateException: User has not joined the group
05-02 17:34:25.180 24720-27635/com.onion W/System.err: at com.hyphenate.chat.EMGroupManager.handleError(Unknown Source)
05-02 17:34:25.181 24720-27635/com.onion W/System.err: at com.hyphenate.chat.EMGroupManager.fetchGroupMembers(Unknown Source)
05-02 17:34:25.181 24720-27635/com.onion W/System.err: at com.onion.view.activity.groups.GroupsActivity$9.call(GroupsActivity.java:364)
05-02 17:34:25.181 24720-27635/com.onion W/System.err: at com.onion.view.activity.groups.GroupsActivity$9.call(GroupsActivity.java:356)
05-02 17:34:25.181 24720-27635/com.onion W/System.err: at rx.Observable.unsafeSubscribe(Observable.java:8666)
05-02 17:34:25.182 24720-27635/com.onion W/System.err: at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
05-02 17:34:25.182 24720-27635/com.onion W/System.err: at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:220)
05-02 17:34:25.182 24720-27635/com.onion W/System.err: at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
05-02 17:34:25.182 24720-27635/com.onion W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
05-02 17:34:25.182 24720-27635/com.onion W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-02 17:34:25.183 24720-27635/com.onion W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154)
05-02 17:34:25.183 24720-27635/com.onion W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
05-02 17:34:25.183 24720-27635/com.onion W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
05-02 17:34:25.187 24720-27635/com.onion W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
05-02 17:34:25.187 24720-27635/com.onion W/System.err: at java.lang.Thread.run(Thread.java:818)
观察报错:
    是因为当前用户没有加入群组,所以不能获取到群组成员列表.
 
-------------------------------------------------------------------------------------------------------------------------
于是,放弃上面的方法,通过查阅API文档,修改为下面的方法:
// 先从服务器拿到群组对象
EMGroup group = EMClient.getInstance().groupManager().getGroupFromServer(groupId);
// 拿出群组成员数量
mMemberCount = group.getMemberCount();
// 拿出群组成员
List members = group.getMembers();
// 遍历集合
for (String id : members) {
subscriber.onNext(id);
}
subscriber.onCompleted();
这个方法,获取的成员数量是正确的,但是成员列表集合却永远都是零的.
我记得之前的版本的SDK是可以这么获取成员列表集合的啊...
 
------------------------------------------------------------------------------------------------------------------------
好,接下来,是我的提问:
    现在版本的SDK,我究竟该用什么方法获取群组的成员列表(在没有加入该群组的情况下)?
已邀请:
http://docs.easemob.com/im/200androidclientintegration/3.3.0apichange
3.3.0之后的版本使用的获取群组成员方法api参考这个,还有就是您获取群组成员之前去获取群组信息在去获取群组成员

要回复问题请先登录注册