2

Eclipse、Java、および asmack を使用して XMPP チャット クライアント アプリを構築しています。チュートリアルと多くの Google 検索を使用して、バディ リストを機能させることができました。実際のチャットも正常に機能します。私の問題は、連絡先リストに追加する仲間を探すことです。送信する XML の例を次に示します: http://xmpp.org/extensions/xep-0055.html 私の要求は:

<iq
id="search123"
from="name3@webserv.xxx.com/name3"
to="search.xxx.zzz.com"
type="set" >
<query xmlns="jabber:iq:search" >
    <nick>
android
    </nick>
</query>
</iq>

私が得ていると思った応答は次のとおりです。

<iq
id="search123"
from="search.xxx.zzz.com"
to="name3@webserv.telebroad.com/Smack"
type="result" >
</iq>

ただし、connConfig.setDebuggerEnabled(true); を使用します。(およびオンラインの Telnet クライアント) サーバーが実際に正しく動作しており、要求された結果を送信していることを確認できましたが、上記の内容を取得しているだけです。私はこれに 4 日間携わっていますが、私の自尊心はかなり低いです :P IQ リクエストとレスポンスに関する私のコードは次のとおりです。

Packet asdf = new Packet() {
                    @Override
                    public String toXML() {
                        return    "<iq type='set'"+
                                " from='name3@webserv.xxx.com/name3'"+
                                " to='search.xxx.zzz.com'"+
                                " id='search2'"+
                                " xml:lang='en'>"+
                              " <query xmlns='jabber:iq:search'>"+
                                " <nick>Android</nick>"+
                              " </query>"+
                            " </iq>";
                    }
                };


ChatList.connection.sendPacket(asdf);
                Log.e("packet", "request = "+ asdf.toXML());
                PacketFilter filter = new IQTypeFilter(IQ.Type.RESULT);
                ChatList.connection.addPacketListener(new PacketListener() {
                    public void processPacket(Packet packet) {
                        IQ iq = (IQ)packet;


                        Log.e("response","incoming packet : "+ packet.toXML());
                        Log.e("response","incoming packet2 : "+ packet.toString());

                    }
                }, filter);  

多くの TypeFilter を試しましたが、役に立ちませんでした。私は困惑しています!

結論:

1.リクエストがサーバーによって正しく受け入れられている;

2.サーバーの応答は正しいです(デバッガーはそう言います);

3. 任意の response.toString または toXML は、上記のタイプ結果 XML を出力します (type='result'>.

4.このアプリの最終ビルドが約 1 週間遅れています...助けてください! :)

4

3 に答える 3

1

追加してみる

ProviderManager pm = ProviderManager.getInstance(); 
pm.addIQProvider( "query","jabber:iq:search",new UserSearch.Provider());
pm.addExtensionProvider("x","jabber:x:data", new DataFormProvider());

接続を確立する前に。

于 2013-01-07T16:07:23.493 に答える
0

https://stackoverflow.com/a/14214622/1688731 これは...うまくいきます!!!! 理由がわかりません。多分Iterator iterator = row.getValues("jid");トリックを行います。しかし、他のすべて、私は何度も試しました!!

于 2013-02-08T12:49:01.707 に答える
0

この仕様はUserSearchManagerを介して既に実装されています。代わりにそれを使用してみてください。

あなた自身のケースについては、この特定の要素と名前空間 (org.jivesoftware.smackx.search.UserSearch$Provider など) に適切なプロバイダーを登録していないと思います。通常の Java 環境ではすでに登録されていますが、Android では自分でコーディングする必要があります。

于 2012-11-08T15:06:51.293 に答える