2012-01-19 13 views
7

मैंने एंड्रॉइड डिवाइस में smack.providers जोड़ने के लिए कुछ समय बिताया है, जो कि मेरे आवेदन द्वारा उठाया गया है ठीक है। मैं डिफ़ॉल्ट iqProviders और extensionProviders जोड़ दिया है, लेकिन मैं यह भी अपने कस्टम extensionProvider है, जो निम्नलिखित है जोड़ दिया है:asmack - कस्टम एक्सएमएल संदेश प्राप्त करना ||

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

मुझे भी PlayerListProvider वर्ग, जो वर्तमान में है परिचय चलो बस अगर यह होगा देखने के लिए कहा जाता हो (जो ऐसा नहीं होता) - मैं इसे पूरी तरह से लागू करेंगे जब मैं पता चल जाएगा यह कहा जाता हो जाता है, इसलिए कम से कम कार्यक्षमता का वह हिस्सा काम करता है:

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> 

मेरा प्रश्न अब है, संदेश प्राप्त करने पर कॉल किया गया प्लेयरलिस्टप्रोवाइडर (एंबेडेड एक्स्टेंशनप्रोवाइडर) क्यों नहीं है। संदेश में टैग है और बॉक्सर का नामस्थान है: प्लेयर, जैसा कि मैंने smack.providers में निर्दिष्ट किया है।

किसी भी विचार?

+0

आपने कैसे किया आपकी समस्या हल हो गई? क्या आप – Hunt

उत्तर

4

इतने पर यहां इसी तरह के मुद्दों के बारे में पढ़ने के बाद, मैं भेजने/प्राप्त कस्टम संदेश को लागू करने के लिए इस question/answer और इस blog post about another way (part 1) (part 2) बारे में जाना।

क्या आपने EmbeddedExtensionProvider के बजाय PacketExtensionProvider का उपयोग करने पर विचार किया है?

यदि आप EmbeddedExtensionProvider के स्थान पर इसे करने में रुचि रखते हैं तो इसे अधिक विस्तार से here में समझाया गया है। यह वही नहीं हो सकता है जो आप खोज रहे हैं ... (ऐसा प्रतीत होता है कि इसमें मैन्युअल-पार्सिंग दृष्टिकोण अधिक होता है, लेकिन यह आपके PlayerListProvider वर्ग को मान्यता प्राप्त हो सकता है (PEPEvent कक्षा को विस्तारित करके)

+0

साझा कर सकते हैं हाय। बेशक मैंने ऐसा किया, और नहीं .addExtensionProvider द्वारा, मैंने smack.providers फ़ाइलों का उपयोग किया, जो व्यावहारिक रूप से वही है, बस एक्सएमएल फ़ाइल प्रारूप में। तो यह समस्या का समाधान नहीं है, क्योंकि यह मेरी समस्या का समाधान नहीं करता है, न ही मैं अपनी समस्या को हल करने के करीब हूं और स्पष्ट रूप से आपने अपना उत्तर देने में बहुत प्रयास नहीं किया है। – eleanor

+1

मैंने अपनी पोस्ट को एक अलग, संभावित उत्तर के साथ संपादित किया है। बस मदद करने की कोशिश कर रहा है ... क्योंकि किसी और ने इस पर कोई विचार नहीं पोस्ट किया है, फिर भी। :) – summea

संबंधित मुद्दे