Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取所有Gtalk联系人';s状态不可用_Android_Google Talk_Asmack - Fatal编程技术网

Android 获取所有Gtalk联系人';s状态不可用

Android 获取所有Gtalk联系人';s状态不可用,android,google-talk,asmack,Android,Google Talk,Asmack,我正在使用asmack api将gtalk与我的android应用程序集成,我可以登录,可以向我的联系人用户发送消息,但我想知道所有联系人的状态,无论他/她在线还是离线,我使用花名册了解它,但显示所有用户的可用性是离线的,没有人在线,事实上,有些用户在线,想知道出了什么问题。有人能帮忙吗?在此处粘贴我的代码: Roster roster= connection.getRoster(); roster.setSubscriptionMode(Roster.getDefaultSub

我正在使用asmack api将gtalk与我的android应用程序集成,我可以登录,可以向我的联系人用户发送消息,但我想知道所有联系人的状态,无论他/她在线还是离线,我使用花名册了解它,但显示所有用户的可用性是离线的,没有人在线,事实上,有些用户在线,想知道出了什么问题。有人能帮忙吗?在此处粘贴我的代码:

Roster roster= connection.getRoster();
        roster.setSubscriptionMode(Roster.getDefaultSubscriptionMode());
        Collection<RosterEntry> entries = roster.getEntries();
        Presence presence2;

                for(RosterEntry entry : entries) {
                    presence2 = roster.getPresence(entry.getUser());

                    System.out.println(entry.getUser());
                    System.out.println(presence2.getType());
                   // System.out.println(presence2.getStatus());
                }
花名册=connection.get花名册();
setSubscriptionMode(花名册.getDefaultSubscriptionMode());
集合条目=花名册.getEntries();
在场2;
对于(排班条目:条目){
presence2=花名册.getPresence(entry.getUser());
System.out.println(entry.getUser());
System.out.println(presence2.getType());
//System.out.println(presence2.getStatus());
}
也尝试过presence2.getMode(),但它返回null。
如果有任何帮助,我们将不胜感激。

您是在什么时候尝试获得名册的?您是否尝试过presence2.isAvailable()?我还建议设置一个花名册侦听器,否则,当任何用户的状态发生变化时,您的列表将不会更新。

以下是我为BuddyList类所做的操作。我将gridview传递给buddylist类,并在线程中运行此代码以更新连接到适配器的数组。我知道这是几个月前的事了,但我想它会在某个时候帮助别人。只要确保从新线程调用updateBuddies即可。当您离开承载buddylist的活动时,请确保关闭此线程。干杯

private void updateBuddies(){
最终花名册=connection.get花名册();
花名册.addRosterListener(新花名册Listener(){
@凌驾
已添加公共无效项(集合arg0){
//TODO自动生成的方法存根
}
@凌驾
已删除公共无效项(集合arg0){
//TODO自动生成的方法存根
}
@凌驾
已更新公共无效项(集合arg0){
//TODO自动生成的方法存根
}
@凌驾
公共无效状态已更改(状态arg0){
activity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
地址a.clear();
nameA.clear();
modeA.clear();
availA.clear();
statusA.clear();
grid.invalidateViews();
集合条目=花名册.getEntries();
对于(名册r:条目){
如果(r.getName()!=null){
字符串email=r.getUser();
String name=r.getName();
Presence pres=花名册.getPresence(r.getUser());
if(pres!=null){
地址a.添加(电子邮件);
名称a.添加(名称);
modeA.add(“+press.getMode());
add(“+press.getType());
statusA.add(“+press.getStatus());
}
}
}
adapter.notifyDataSetChanged();
}});
}});
}

如果没有更多的代码,我无法确定会发生什么。我基本上做了类似的事情,我得到了所有用户的关注。还能够在用户联机或脱机时更新其状态
    private void updateBuddies() {
    final Roster roster = connection.getRoster();
    roster.addRosterListener(new RosterListener() {

        @Override
        public void entriesAdded(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void entriesDeleted(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void entriesUpdated(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void presenceChanged(Presence arg0) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    addressA.clear();
                    nameA.clear();
                    modeA.clear();
                    availA.clear();
                    statusA.clear();
                    grid.invalidateViews();
                    Collection<RosterEntry> entries = roster.getEntries();
                    for(RosterEntry r:entries) {
                        if (r.getName() != null) {
                            String email = r.getUser();
                            String name = r.getName();
                            Presence pres = roster.getPresence(r.getUser());

                            if (pres != null) {
                                addressA.add(email);
                                nameA.add(name);
                                modeA.add(""+pres.getMode());
                                availA.add(""+pres.getType());
                                statusA.add(""+pres.getStatus());   
                            }
                        }
                    }
                    adapter.notifyDataSetChanged();
                }});
        }});
    }