Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用android的asmack XMPP库时无法从消息标记读取自定义属性?_Android_Xmpp_Smack_Xmppframework_Asmack - Fatal编程技术网

使用android的asmack XMPP库时无法从消息标记读取自定义属性?

使用android的asmack XMPP库时无法从消息标记读取自定义属性?,android,xmpp,smack,xmppframework,asmack,Android,Xmpp,Smack,Xmppframework,Asmack,这是从XMPP服务器端发送的XML,我希望接收它,以便将其发送到XML解析器 <message to="39@domainname.com/smack" chat_id="73392" custom_packet="true" user_id="44" manager_id="39" time_stamp="0" website_id="0" visitor_name="John" end_time="False" xml:lang="en-us" type

这是从XMPP服务器端发送的XML,我希望接收它,以便将其发送到XML解析器

<message to="39@domainname.com/smack" chat_id="73392" 
       custom_packet="true" user_id="44" manager_id="39" time_stamp="0" website_id="0" 
       visitor_name="John" end_time="False" xml:lang="en-us" type="groupchat" 
       from="room73392@conference.domainname.com/39">
       <body>Hello</body> 
       <x xmlns="http://jabber.org/protocol/muc#user"> 
       <status xmlns="" code="0"/>   
       </x></message>

你好
这是我收到的一个示例XML。 当我使用p.toXML()时//包p

 <message to="44@domainname.com/Smack" 
    from="room73407@conference.domainname.com/Visitor1171" type="groupchat">
    <body>Hello</body>
    <delay xmlns="urn:xmpp:delay"></delay>
    <x xmlns="jabber:x:delay" stamp="20120917T05:57:19" 
    from="4732abb5@domainname.com/4732abb5">
    </x></message>

你好
我刚刚开始使用XMPP服务器。因此,任何指导都将不胜感激

do {
    ParseEvent event=parser.read();
    ParseEvent pe;

    switch(event.getType()){
        case Xml.START_TAG:
        if (event.getName().toString().equals("message")){
                int xx=event.getAttributeCount();

                String _s2=event.getAttribute("to").getValue();
                if(_s2=="" || _s2==null){
                    _s2="N/A";
                }

                String _s3=event.getAttribute("from").getValue();       
                if(_s3=="" || _s3==null){
                    _s3="N/A";
                }

                String _s4=event.getAttribute("type").getValue();
                if(_s4=="" || _s4==null){
                    _s4="N/A";
                }

                String _s1=_s2+"~~"+_s3+"~~"+_s4;
                m_result.add(new BeanClassName(_s1));                   
        }
        (...)
    }
}

您可以通过为每种情况添加start标记,然后在bean类中设置值来读取属性。

如果不修改源代码,在Smack(以及aSmack)中就无法执行此操作。它将只解析一个标准的消息节,因此您的所有自定义属性都将被忽略。XMPP中的正确方法是创建标准数据包的扩展,而不是修改它们。如果您可以控制从服务器发送的内容,那么您应该更改向消息添加自定义扩展名的方法,从而更改此方法

<message to="39@domainname.com/smack" chat_id="73392" 
 custom_packet="true" user_id="44" manager_id="39" time_stamp="0" 
 website_id="0" visitor_name="John" end_time="False" xml:lang="en-us" 
 type="groupchat" from="room73392@conference.domainname.com/39">
   <body>Hello</body>
   <x xmlns="http://jabber.org/protocol/muc#user">
      <status xmlns="" code="0"/>
   </x>
</message>

您可以签出以非常轻松地编写提供者。

这个bean类在哪里。我的意思是在哪一个Asmack源代码包中?@SherazKhilji需要我为uYes创建一个bean类。我是XMPP新手,所以请注意,如果上面的代码是用于编写XML解析器的,那么我希望接收自定义XML数据包。我已经有了一个XML解析器。请再次阅读此问题,但使用我上面编辑的代码,您可以在这里看到xmlRobin中属性的值。你问错问题了。但是,请注意您使用的名称空间URI;“my:”不是您控制的已注册URI前缀。如果您不打算执行标准,您控制的http://URL可以用作保证唯一的URI。谢谢您的回复。因此,我必须为此修改服务器端代码。我无法从消息节中提取属性。我通过修改源代码解决了这个问题。有关如何执行此操作的更多详细信息,请访问链接。永远不要为XMPP顶级元素发明自己的属性。另见。而是添加扩展名
/
<message to="39@domainname.com/smack" chat_id="73392" xml:lang="en-us" 
 type="groupchat" from="room73392@conference.domainname.com/39">
   <body>Hello</body>
   <x xmlns="http://jabber.org/protocol/muc#user">
      <status xmlns="" code="0"/>
   </x>
   <custom xmlns="my:namespace:custom" user_id="44" manager_id="39" time_stamp="0" 
 website_id="0" visitor_name="John" end_time="False"/>
</message>
MyExtension customStuff = message.getExtension("my:namespace:custom");