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