2011-06-30 106 views
3

私は、サーバとの通信にKSoap2を使用しています。コミュニケーションはうまくいき、私が以下に述べた一連の値を返します。私は応答を処理している方法ではわかりません。私は、JavaオブジェクトとXMLオブジェクトをマッピングするためのKvmSerializableを実装して、別のJavaクラスを書きました。ウェブでの長い研究の後、私はSAX、 ..etcは、より標準的で柔軟性のあるDOMのようなパーサの使用を発見しました。これは、AndroidでSOAPレスポンスを処理する最善の方法です。

、私は次の応答を解析するためのSAXをもたらすことができる任意の方法は、これは私がからサーバにリクエストを送信してしまった後ということ応答..ですもしそうなら、いくつかの参照を提供してください...

あります私のアンドロイドクライアントアプリ。この応答は.xml /で終わらず、.xmlファイルとして返されます。

これは、Webクライアントの応答である:これは、応答である

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のネイティブパーサーを使用することが可能です。

ありがとうございました。

答えて

4
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プロパティをカウントする必要があります。

数を取得した後、データを持っているプロパティを1つずつチェックしてください。 内部ループを実装することもできます。

関連する問題