2012-01-19 21 views
7

He gastado algo de tiempo para agregar smack.providers en el dispositivo Android, que mi aplicación ha recogido muy bien. He añadido los iqProviders por defecto y extensionProviders, pero también he añadido mi costumbre extensionProvider, que es la siguiente:asmack - recibir mensajes XML personalizados ||

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

Permítanme también introducen la clase PlayerListProvider, que es en la actualidad no sólo para ver si se puede ser llamado (que no lo hace) - voy a ponerlo en práctica plenamente cuando sabré que se llama, por lo tanto, al menos esa parte de la funcionalidad funciona:

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

} 

Y estoy recibiendo el siguiente mensaje cuando Corro el cliente de la aplicación de Android:

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

Mi pregunta ahora es: ¿por qué no se llama al PlayerListProvider (EmbeddedExtensionProvider) al recibir el mensaje? El mensaje contiene la etiqueta y tiene el espacio de nombre de boxer: player, como especifiqué en smack.providers.

¿Alguna idea?

+0

cómo lo hizo Resolvió tu problema? ¿Puedes compartir – Hunt

Respuesta

4

Después de leer acerca de problemas similares aquí en SO, me encontré con este question/answer y esto blog post about another way (part 1) (part 2) para poner en práctica el mensaje personalizado de envío/recepción.

¿Ha considerado usar PacketExtensionProvider en lugar de EmbeddedExtensionProvider?

Se explica con más detalle here, si está interesado en probarlo en lugar del EmbeddedExtensionProvider. Puede que no sea exactamente lo que está buscando ... (parece que requiere más de un enfoque de análisis manual), pero podría obtener su clase PlayerListProvider reconocida (mediante la extensión de la clase PEPEvent)

+0

Hola. Por supuesto que hice eso, y no por .addExtensionProvider, utilicé los archivos smack.providers, que hacen prácticamente lo mismo, solo en formato de archivo XML. Entonces esta no es la solución al problema, ya que no resuelve mi problema, ni estoy más cerca de resolver mi problema y claramente no pusiste mucho esfuerzo en producir tu respuesta. – eleanor

+1

He editado mi publicación con una respuesta diferente y posible. Solo trato de ayudar ... ya que nadie más ha publicado un pensamiento sobre esto, todavía. :) – summea

Cuestiones relacionadas