2

asmack-android-7.jar the apiを使用して、AndroidでXMPPMUCルームを構築しようとしています。まず、インスタントルームを作成し、次にその部屋にmucリスナーを追加します。次のようなコードスニペット:

    //create the an instant room if the same room has not been created.
    MultiUserChat muc = new MultiUserChat(mConnection, roomJid);
    muc.create(ownerNickname);
    muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
    // join a room  and add listener 
   mMuc = new MultiUserChat(mConnection, roomJid);
   mMuc.join(vistorNickname);
   addListenerToMuc(mMuc);
   // the listener function
   private void addListenerToMuc(MultiUserChat muc){
    if(null != muc){
        muc.addMessageListener(new PacketListener() {

            @Override
            public void processPacket(Packet packet) {
                Log.i("processPacket", "receiving message");
                }
        });
    }
}

そうすると、物事は私にとって本当に混乱します。最初に、リスナーがうまく機能するときもありますが、私が部屋を出てから再び参加すると、リスナーは常に次のような形式でメッセージを処理できない可能性があります。

 RCV  (723971008): <message id="FdkcR-24" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/nutch"><body> from nutch</body></message>

ただし、次のようなメッセージが来ると、リスナーは常にかなりうまく機能します。

 <message id="S7JfM-111" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/hangzhou@video"><body>I love you</body><x xmlns="jabber:x:event"><offline/><delivered/><displayed/><composing/></x></message>

1つ以上の拡張子が付いたメッセージは常に正常に機能するようですが、拡張子が付いていないメッセージは失敗する傾向があります。私はこれについて本当に混乱しています、誰かが何が起こったのか教えてもらえますか?私はあなたの考えに本当に感謝します。

私が見つけた別の質問は、最初にインスタントルームを作成し、次にMulitUserChatの新しいオブジェクトを作成せずにルームに参加すると、たとえばスパーククライアントを使用して他の人がルームに参加できず、エラーが発生することです。部屋は存在しません。具体的には、コードスニペットは次のようになります。

MultiUserChat mMuc = new MultiUserChat(mConnection, roomJid);
        muc.create(ownerNickname);
        muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
        // join a room  and add listener 
       mMuc.join(vistorNickname);

私はこれらのことに本当に不満を感じています。すべてのアイデアを歓迎します。どうもありがとう。

4

1 に答える 1

0

2 番目の質問に対する簡単な解決策があります。ルームを作成した直後にルームに参加する必要はありません。なぜなら、それらは実際にはある程度は同じことを意味し、上で説明した現象は、smack ライブラリの create( ) および join( ) 関数の実装と関係があるからです。

于 2013-03-22T10:16:28.563 に答える