Smack 中的 Presence getType() 和 isAvailable() 有啥区别?
Posted
技术标签:
【中文标题】Smack 中的 Presence getType() 和 isAvailable() 有啥区别?【英文标题】:What is the difference between Presence getType() and isAvailable() in Smack?Smack 中的 Presence getType() 和 isAvailable() 有什么区别? 【发布时间】:2014-07-07 07:07:45 【问题描述】:我正在尝试使用 asmack 在我的聊天名单中获取用户的存在。 据我了解, Presece.getType() 应该返回以下存在类型之一:
每个出席信息包都有一个类型,它是以下值之一:
available -- (Default) indicates the user is available to receive messages.
unavailable -- the user is unavailable to receive messages.
subscribe -- request subscription to recipient's presence.
subscribed -- grant subscription to sender's presence.
unsubscribe -- request removal of subscription to sender's presence.
unsubscribed -- grant removal of subscription to sender's presence.
error -- the presence packet contains an error message.
在我的在线用户的存在对象上使用 Presence.getType() 给了我这个:
Log.e("Presence?",myRoster.getPresence(entry.getUser()).getType().toString());
Unavailable
但是,在同一用户上使用 Presence.isAvailable() 会给我:
Log.e("Presence?",Boolean.toString(myRoster.getPresence(entry.getUser()).isAvailable()));
True
根据以下定义,getType() 和 isAvailable() 不应该返回相同的结果吗?
public Presence.Type getType()
返回此出席信息包的类型。
public boolean isAvailable()
如果存在类型可用(在线),则返回 true;如果用户不可用(离线),或者这是订阅操作中涉及的存在数据包,则返回 false。这是一种等效于 getType() == Presence.Type.available 的便捷方法。
我错过了什么?两者有什么区别?
【问题讨论】:
【参考方案1】:如果你查看源代码,你会发现
public boolean isAvailable()
return type == Type.available;
还有javadoc of isAvailable() 声明
这是一种等效于 getType() == 的便捷方法 Presence.Type.available。
【讨论】:
感谢流。因此,如果 present.isAvailable() 返回 True,则意味着 type = available。但是,同一个存在对象上的存在.getType() 返回“不可用”。我们如何解释这种差异? 可能是因为它不是同一个存在实例。以上是关于Smack 中的 Presence getType() 和 isAvailable() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
无法访问 discord.js 中的 user.presence.activities
Rails validates_presence_of 并验证 has_one 关联模型中的存在