gpt4 book ai didi

android - 注销以在 xmpp smack 中添加好友

转载 作者:行者123 更新时间:2023-11-29 21:55:32 27 4
gpt4 key购买 nike

在我的应用程序中,当我必须添加 friend 时,我通常会发送 4 次订阅数据包即

A->B(订阅)B->A(已订阅)B-A(订阅)A->B(已订阅)

在每一步之后,我都会在服务器上看到状态立即发生变化。

但在我的应用程序中,它仅在注销并再次登录后才会反射(reflect)出来。此人在添加好友后必须注销一次,然后好友列表中才会显示该好友>

有什么问题?我找了很多但没有发现任何错误:(

logcat 中没有显示错误。

我还打印了每个数据包发送后的 syso 输出。它总是说 NONE(对于发送请求的人)并且总是说 TO/FROM(对于发送好友请求的用户)。直到并且除非有人登录,否则两者都不会反射(reflect)出来退出并重新登录。

请帮帮我:(

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);
}
}
}

谢谢

最佳答案

发送一个你必须使用的请求,

roster.createEntry("mail_id", null, null);

对于 Listening 请求,您必须使用 PacketListener 来监听。并检查 Presence

Presence presence = (Presence) packet;
Presence presence_request = new Presence(Presence.Type.subscribed);
presence_request.setTo(presence.getFrom());
presence_request.setType(Presence.Type.subscribed);
presence_request.setFrom("current_logged_in_user");
connection.sendPacket(presence_request);
roster.createEntry(presence.getFrom(), null, null);

关于android - 注销以在 xmpp smack 中添加好友,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com