在我的应用程序时,我有添加好友我通常发送订阅包4倍,即
A-> B(订阅)B-> A(订阅)BA(订阅)A-> B(订阅)
每个步骤后,我看到状态立即改变在服务器上。
但是,在我的应用程序只出来的日志记录和重新登录后,以反映。 该人已一次注销后他就会增加一个朋友,那么只有朋友示于他的朋友LIST>
有什么问题? 我已经找到了很多,但因此未发现任何错误:(
没有错误显示在logcat中。
我还打印syso输出被发送的每个数据包之后。 它总是说为NONE(在人的情况下,向谁请求被发送),并总是说/从(在谁发送了好友请求的用户的情况下)..两个不反映,直到,除非一个人日志并再次登录。
请帮我 :(
Add Friend Function
public boolean addFriend(String jid) {
String nickname = null;
String idExtension = jid+"@abc.hostname.com";
nickname = StringUtils.parseBareAddress(jid);
if (!roster.contains(idExtension)) {
try {
roster.createEntry(idExtension, nickname, null);
//to subscribe the user in the entry
Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo(idExtension);
connection.sendPacket(subscribe);
return true;
} catch (XMPPException e) {
System.err.println("Error in adding friend");
return false;
}
} else {
return false;
}
}
它会发送通知给其他用户..在允许此代码写的是: -
btn_Allow = (Button)findViewById(R.id.btn_manageNotification_ALLOW);
btn_Allow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//accept the friends subscription
Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo(id);
connection.sendPacket(subscribed);
mCustomProgressDialog = CustomProgressDialog.createDialog(
ManageNotification.this, "", "");
mCustomProgressDialog.show();
mCustomProgressDialog.setCancelable(false);
new Thread(){
public void run() {
try {
sleep(5000);
//mXmconn.getContactList();
/*Presence subscribed = new Presence(Presence.Type.subscribe);
subscribed.setTo(id);
System.out.println("The user is :"+id);
connection.sendPacket(subscribed);*/
} catch (InterruptedException e) {}
mReturnUserMenu.sendEmptyMessage(0);
};
}.start();
}
});
同样是做一次重新允许谁发起请求的用户。
请帮忙。 预订状态会立即更改服务器上,而在应用程序被注销后更新一次。
这里是代表列表中的代码
public void getContactList(){
roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
System.out.println("Total=="+entries.size());
mfriendList.clear();
mfriendPendingList.clear();
mfriendRequestList.clear();
for (RosterEntry entry : entries) {
mFriendsDataClass = new FriendsDataClass();
mFriendsDataClass.friendName = entry.getUser().toString();
String user = entry.getUser();
int index_of_Alpha = user.indexOf("@");
/*System.out.println("The current working user is : "+user);
System.out.println("His status is"+entry.getType().toString());*/
String subID = user.substring(0, index_of_Alpha);
Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();
mFriendsDataClass.availability = "";
mFriendsDataClass.friendNickName = subID;
mFriendsDataClass.friendStatus = stusMsg.toString();
mFriendsDataClass.friendState = retrieveState_mode(availability.getMode(),availability.isAvailable());
if(entry.getType().toString().equalsIgnoreCase("to")){
//getContactList();
mfriendRequestList.add(mFriendsDataClass);
}else if(entry.getType().toString().equalsIgnoreCase("from")){
//getContactList();
mfriendPendingList.add(mFriendsDataClass);
}else if(entry.getType().toString().equalsIgnoreCase("both")){
//getContactList();
mfriendList.add(mFriendsDataClass);
}
}
}
谢谢