【问题标题】: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 的便捷方法。

我错过了什么?两者有什么区别?

【问题讨论】:

    标签: xmpp chat smack


    【解决方案1】:

    如果你查看源代码,你会发现

    public boolean isAvailable() {
        return type == Type.available;    
    }
    

    还有javadoc of isAvailable() 声明

    这是一种等效于 getType() == 的便捷方法 Presence.Type.available。

    【讨论】:

    • 感谢流。因此,如果 present.isAvailable() 返回 True,则意味着 type = available。但是,同一个存在对象上的存在.getType() 返回“不可用”。我们如何解释这种差异?
    • 可能是因为它不是同一个存在实例。
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2015-04-02
    • 2010-10-02
    • 2011-12-12
    相关资源
    最近更新 更多