在我的申请中,当我使用此代码向任何朋友发送请求时..
try {
roster.createEntry(idExtension, nickname, null);
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
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;
}
然后订阅在两个朋友名单中都显示“无”。
但它应该是“TO”和“FROM”。
但是如果对于同一个过程我使用这个代码 -
try {
roster.createEntry(idExtension, nickname, null);
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
Presence subscribed = new Presence(Presence.Type.subscribed);
subscribed.setTo(idExtension);
connection.sendPacket(subscribed);
return true;
} catch (XMPPException e) {
System.err.println("Error in adding friend");
return false;
}
然后它给了我正确的结果,我应该在前面的案例中得到。
请告诉我为什么我在SUBSCRIBE模式下没有这样做。
由于
答案 0 :(得分:3)
我猜你没有在Presence中获得类型的含义。
订阅 - 发件人希望订阅收件人 存在。
订阅 - 发件人已允许收件人 接受他们的存在。
因此,当您发送第一个请求时,您请求用户订阅他的状态事件,直到他不允许您这样做,订阅类型为无。
在第二种情况下,您允许用户订阅您的状态,即您允许他聆听您的状态,从而获得订阅类型。