4

在我的应用程序中,当我使用此代码向任何朋友发送请求时..

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

然后订阅在两个朋友名册中都显示“NONE”。

但它应该是“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;
            }

然后它给了我在前一种情况下应该得到的正确结果。

请告诉我为什么我在订阅模式下没有得到相同的结果。

谢谢

4

1 回答 1

3

我猜你没有在 Presence 中理解 type 的含义。

subscribe -- 发件人希望订阅收件人的出席信息。

subscribed -- 发件人已允许收件人收到他们的出席信息。

因此,当您发送第一个请求时,您请求用户让您订阅他的出席事件,直到他不允许您这样做,订阅类型为无。

在第二种情况下,您允许用户订阅您的状态,即您允许他收听您的状态,因此您获得订阅类型。

于 2012-10-19T14:11:18.270 回答