Smack:Packet属性

Smack提供了一个简单地机制向packet附加任意属性。每个属性有一个字符串名称,和一个Java原始类型(int,long,flat,double,boolean)的值或者任何可序列化的对象(一个对象当他实现了Serializable接口的时候是可序列化的)。 

 

使用API 

所有主要对象有属性支持,例如Message对象。下面的代码演示了如何设置属性: 

Message message = chat.createMessage();  
// Add a Color object as a property. 
message.setProperty("favoriteColor", new Color(0, 0, 255));  
// Add an int as a property. 
message.setProperty("favoriteNumber", 4); 
chat.sendMessage(message); 
获取这些属性应该使用下面的代码:  

Message message = chat.nextMessage();  
// Get a Color object property. 
Color favoriteColor = (Color)message.getProperty("favoriteColor");  
// Get an int property. Note that properties are always returned as  
// Objects, so we must cast the value to an Integer, then convert  
// it to an int.  
int favoriteNumber = ((Integer)message.getProperty("favoriteNumber")).intValue();
对象做为属性  

使用对象作为属性值是一个非常强大且简单地的数据交换方式。然而,你应该记住如下: 

  • packet扩展名是向XMPP节添加额外的数据比较标准的方式。使用属性可能在某些情况下更方便,可是,Smack将执行处理XML的工作。 

  • 当你以一个Java对象作为属性的时候,仅仅运行java的客户端能翻译这个数据。所以,考虑使用一系列原始的值来传输数据替代。 

  • 作为属性值的对象必须实现Serialiable。此外,发送者和接收者必须有这个类的最新版本,不然当序列化这个对象的时候将会产生一个serialization异常。 

  • 序列化对象能十分大,它将使用更多的带宽和服务器资源。 

 

XML格式 

当前用于发送属性数据的XML格式不是一个标准,所以在没有使用smack的客户端将可能无法识别。这个XML如下面所示(清晰的添加注释): 

<!-- All properties are in a x block. -->  
<properties xmlns="http://www.jivesoftware.com/xmlns/xmpp/properties">  
<!-- First, a property named "prop1" that's an integer. -->  
    <property>  
        <name>prop1</name>  
        <value type="integer">123</value>  
    <property>  
<!-- Next, a Java object that's been serialized and then converted from binary data to base-64 encoded text. -->  
    <property>  
        <name>blah2</name> 
        <value type="java-object">adf612fna9nab</value>  
    <property>  
</properties>  
当前支持的类型是:integer,long,float,double,boolean,string,和java-object。  

你可能感兴趣的:(android,smack,property,XMPP,packet)