2012-01-19 14 views
7

私はアンドロイドデバイスにsmack.providersを追加するのに少し時間を費やしました。これは私のアプリケーションでうまくいきました。それがする場合だけ見るためにasmack - カスタムXMLメッセージを受信します。

<extensionProvider> 
    <elementName>players</elementName> 
    <namespace>boxer:players</namespace> 
    <className>company.games.boxer.PlayerListProvider</className> 
</extensionProvider> 

は私も今のところありPlayerListProviderクラスを、ご紹介しましょう:私は、デフォルトのiqProvidersとextensionProvidersを追加しましたが、私はまた、次のようである私のカスタムextensionProviderを、追加しました

import java.util.List; 
import java.util.Map; 

import org.jivesoftware.smack.packet.PacketExtension; 
import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider; 

import android.util.Log; 

@SuppressWarnings("deprecation") 
class PlayerListProvider extends EmbeddedExtensionProvider { 
    protected PacketExtension createReturnExtension(String currentElement, String currentNamespace, Map<String,String> attributeMap, List<? extends PacketExtension> content) { 
    Log.w("***** AAAAAAAAAAAAAAAAAAAA *******", "0"); 
    return new XMLPlayerList(); 
    } 

} 



class XMLPlayerList implements PacketExtension { 

    public String getElementName() { 
    return "aaaaa"; 
    } 

    public String getNamespace() { 
    return "aaaaa"; 
    } 

    public String toXML() { 
    return "aaaaa"; 
    } 

} 

そして私は、次のメッセージが出ています:私はそれが呼び出される知っているよときに私はそれを完全に実装します、したがって、機能性の少なくとも一部が動作します - (それはない)と呼ばれますクライアントアンドロイドアプリを実行します:

<message to="[email protected]" type="chat" id="9" from="[email protected]"> 
    <body> 
    &lt;players xmlns="boxer:players" command="playerlist"&gt; 
     &lt;player&gt;test1&lt;/player&gt; 
     &lt;player&gt;test2&lt;/player&gt; 
    &lt;/players&gt; 
    </body> 
    <thread>3P0i00</thread> 
</message> 

私の質問は今、なぜPlayerListProvider(EmbeddedExtensionProvider)がメッセージの受信時に呼び出されないのですか?メッセージにはtagが含まれていて、smack.providersで指定したようにboxer:playerという名前空間があります。

どのような考えですか?

+0

あなたの問題を解決しましたか?あなたは – Hunt

答えて

4

SO上でここに同様の問題について読んだ後、カスタムメッセージ送信/受信を実装するために、私はこのquestion/answer渡って来て、このblog post about another waypart 1)(part 2)。

EmbeddedExtensionProviderの代わりにPacketExtensionProviderを使用しましたか?

EmbeddedExtensionProviderの代わりに試してみたい場合は、hereで詳しく説明しています。あなたが探しているものと正確には異なるかもしれません...(手作業で解析するアプローチのほうが多いようですが)PEPEventクラスを拡張してPlayerListProviderクラスを認識させる可能性があります。

+0

こんにちは。もちろん、.addExtensionProviderではなく、smack.providersファイルを使用しました。これは実質的に同じですが、XMLファイル形式です。だから私の問題を解決しないので、これは問題の解決策ではなく、私は自分の問題を解決することに近づくこともなく、あなたの答えを生み出すために多くの努力を払っていませんでした。 – eleanor

+1

私は自分の投稿を異なる可能な答えで編集しました。ただ助けようとしています...誰もこれについて考えを投稿していないからです。 :) – summea

関連する問題