如何在更改其中一个名单条目的状态信息后获得名册

时间:2015-07-29 14:20:30

标签: xmpp smack

我现在正在使用smack 4.1。所有我想在发送状态后重新加载/刷新名单并获得新名单中的更改。 例如

  1. 我有一个用户输入' A'在名册中使用类型无和状态为null
  2. 然后我发送了一个订阅状态,用于上面输入的用户&#39; <&#39;
  3. 现在我想重新加载并等到名单没有刷新(它与smack中提供的Roster.reloadAndWait()方法不同)
  4. 在名册更新后,我会进入用户&#39; A&#39;如type = none和status = subscribe。
  5. 所以我的问题在这里

    1. 是否有一个简单的阻止调用重新加载新的名册?根据我的研究,roster.reload()会发送一个IQ重新加载,但它不会阻止调用直到重新加载。 reloadAndWait()方法在boolean isLoaded的帮助下从第二次和向前调用也做同样的事情。 reloadAndWait方法只会在未加载的情况下第一次阻止调用(如果错误则纠正我)。

    2. 当名单重新加载操作在smack中完成(同步或异步)时,有没有办法获得回调?

    3. 是否可以请求重新加载单个RosterEntry?

    4. 通过名册更新验证状态变化的影响是否良好做法?

    5. 感谢您宝贵的建议和回答

1 个答案:

答案 0 :(得分:0)

一般方法是在会话期间不要求服务器上的名单多次。

XMPP中的预期工作流程如下:

  1. 在会议开始时请求名册。这不是强制性的,但通常都是如此。请参阅参考RFC 6121 Retrieving Roster on Login
  2. 根据您执行的名册更改更新您的内存名单状态。并非您将收到名单更改确认,无论这是您当前执行更改的会话还是使用相同JID(Roster Set resultRoster Push)登录的其他客户端。
  3. 这样做,您将始终拥有您的名单的内存中代表,这在您的整个会话期间是最新的。这是XMPP专为此设计的工作流程。