用户存在值从 asmack 变为空

Posted

技术标签:

【中文标题】用户存在值从 asmack 变为空【英文标题】:User presence value is coming null from asmack 【发布时间】:2014-10-24 07:55:50 【问题描述】:

我正在构建一个带有 open fire server 和 asmack 在 android 中的聊天应用程序。 我正在使用来自模拟器的 2 个用户(让 A 和 B)和来自 spark 的另外 1 个用户(让 C)连接到开火服务器。

另外,我为用户存在值的任何变化添加了名册侦听器。

因此,当应用程序正在侦听名册更新时,来自模拟器(即来自 asmack api)的用户的 presence.getstatus 值为 null。但我正在获取来自 spark 的用户的状态值。

以下是为状态更改实现的代码。

public void presenceChanged(Presence presence) 


            String Name="",Status="";
            Log.d(TAG, "Presence value = "+presence);
            Log.d(TAG, "Presence getfrom value = "+presence.getFrom());
            Log.d(TAG, "Presence getstatus value = "+presence.getStatus());
            Log.d(TAG, "Presence getto value = "+presence.getTo());

以下是 spark 用户的日志。

Presence value = available (Online)
Presence getfrom value = swathi@btp121374/Spark 2.6.3
Presence getstatus value = Online
Presence getto value = kpvsrkp@btp121374

以下是来自 asmack android 的用户日志。

Presence value = available
Presence getfrom value = ganesh@btp121374/Smack
Presence getstatus value = null
Presence getto value = kpvsrkp@btp121374

所以这里的问题是为什么 asmack 用户的 presence.getStatus() 为 null。

Presence getstatus value = null

有人可以告诉我还需要做什么来获取 asmack 用户的 presence.getStatus() 值。

【问题讨论】:

哪个 Smack 版本?尝试启用 SmackConfiguration.DEBUG 并查看 Smack 收到的出席信息节是否包含状态。 我正在使用这个 asmack-android-4.jar。现在,一旦与 openfire 的连接完成,我就可以通过设置存在来从 asmack 获取状态。真的需要吗? 我现在没有asmack-android-4.jar,你确定jar名里没有minor version和patch level version? 【参考方案1】:

使用此功能获取状态 存在 mPresence = YourXmppConnection .getRoster().getPresence(Userjid); mPresence.getType() 提供用户的可用性。对照 Presence.Type.available 检查它

【讨论】:

【参考方案2】:
new AsyncTask<Object,Object,Object>()

    @Override
    protected Object doInBackground(Object[] params) 
        Presence availability1=roster.getPresence("aaaaedmn1474531771@staging.cardamomapp.com");
        return availability1;
    

    @Override
    protected void onPostExecute(Object object) 
        super.onPostExecute(object);
        Presence data=(Presence)object;
        Log.d("Presence-----","Presence========>>"+data.getStatus());
        sendBroadCast(""+data.getStatus());
    
.execute();

【讨论】:

以上是关于用户存在值从 asmack 变为空的主要内容,如果未能解决你的问题,请参考以下文章

linux字符测试

i 整数的 cmd.ExecuteNonQuery 值从 0 变为 -1

使用脚本选项及组合条件测试

从 NSDictionary 设置时,BOOL 值从 NO 变为 Yes

从 NSDictionary 设置时,BOOL 值从 NO 变为 Yes

如何在 asmack 中使用 PubSubManager 发布和解析