ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

这是处理Android中SOAP响应的最佳方法

2019-11-02 12:24:48  阅读:178  来源: 互联网

标签:parsing android soap


我正在使用KSoap2与服务器进行通信.沟通很好,并返回了我在下面提到的一组值.我不确定我处理回复的方式.我编写了一个单独的Java类,该类实现了KvmSerializable,用于将XML对象与Java对象映射.经过长时间的网络研究,我发现使用SAX,DOM等解析器更加标准和灵活.

有什么办法可以使SAX解析以下响应…如果是,请提供一些参考.

这是我从android客户端应用向服务器发送请求后得到的响应.请注意,此响应不以.xml结束/作为.xml文件返回.

这是webclient的响应:

http://134.1.10.5/Maxima/MaximaSystem.asmx/ValidateLogin

<DataSet>
<xs:schema id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="UserIcode" type="xs:int" minOccurs="0"/>
<xs:element name="UserUserName" type="xs:string" minOccurs="0"/>
<xs:element name="UserPassword" type="xs:string" minOccurs="0"/>
<xs:element name="UserTypeICode" type="xs:int" minOccurs="0"/>
<xs:element name="ProfileTable" type="xs:string" minOccurs="0"/>
<xs:element name="UserTypeDesc" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

<diffgr:diffgram>

<NewDataSet>
<Table diffgr:id="Table1" msdata:rowOrder="0">
<Name>Frecan </Name>
<UserIcode>634</UserIcode>
<UserUserName>dairy</UserUserName>
<UserPassword>dairy123</UserPassword>
<UserTypeICode>632</UserTypeICode>
<ProfileTable/>
<UserTypeDesc>Dentist</UserTypeDesc>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

这就是回应.没有XML标签…任何内容…请建议我可以使用Android的原生解析器解析它的最佳方法.如果是这样,请提供一些参考.

这是我通过Android客户端ping服务器时获得的响应的示例

 anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=an
 yType{complexType=anyType{sequence=anyType{element=anyType{....
 // some values ........
 };
 element=anyType{};
 element=anyType{}; element=anyType{}; element=anyType{};     element=anyType{}; 
 element=anyType{}; }; }; }; }; };unique=anyType{selector=anyType{};
 field=anyType{};}; }; }; diffgram=anyType{}; }

请让我知道,是否可以在Android中使用本机解析器.

提前致谢.

解决方法:

SoapObject result = (SoapObject)envelope.bodyIn;

    if(result != null){

        int count = result.getPropertyCount();
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + count);

        SoapObject nameResult = (SoapObject) result.getProperty(0);
        // TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + nameResult.toString());

        SoapObject test = (SoapObject) nameResult.getProperty(1);
        // TextView t = (TextView)this.findViewById(R.id.resultbox);
        // t.setText("SOAP response:\n\n" + test.toString());

        SoapObject dar = (SoapObject) test.getProperty(0);
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        //t.setText("SOAP response:\n\n" + dar.toString());

        SoapObject suvas = (SoapObject) dar.getProperty(0);
        int c = dar.getPropertyCount();
        TextView t = (TextView)this.findViewById(R.id.resultbox);
        t.setText("SOAP response:\n\n" + suvas.toString());
        //t.setText("SOAP response:\n\n" + c);
        //SoapObject nivas = (SoapObject) suvas.getProperty(NewsId);
        //TextView t = (TextView)this.findViewById(R.id.resultbox);
        // t.setText("SOAP response:\n\n" + nivas.toString());

    }

首先,您必须在soapObject中获得一个soap响应,然后再计算total属性.

计数后,请一一检查您拥有数据的属性,
您还可以实现内部循环.

标签:parsing,android,soap
来源: https://codeday.me/bug/20191102/1991606.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有