これまでのところ、Web サービスに接続して SoapObject 応答を取得することができましたが、適切でクリーンな解析方法を絞り込むのに苦労しています。インターネットを検索しても実際には多くの結果が得られませんでした。誰もが異なる方法と異なるプロセスを持っており、通常は独自の Web サービスを対象としており、1 回限りの使用タイプのソリューションになっています。基本的に、以下はWebサービスから得た応答です
anyType{
schema=anyType{
element=anyType{
complexType=anyType{
choice=anyType{
element=anyType{
complexType=anyType{
sequence=anyType{
element=anyType{};
element=anyType{};
element=anyType{};
element=anyType{}; }; }; }; }; }; }; };
diffgram=anyType{
NewDataSet=anyType{
Rep_x0020_Information=anyType{
Login=CorrectLogin; Password=InCorrectPass; }; }; }; }
基本的に、2 つの重要なフィールド (ログインとパスワード) だけを解析できるようにしたいと考えています。私が読んだことから、プロパティ数に基づいて SoapObject 応答を反復しようとしましたが、うまくいかないようです。試してみると、応答のプロパティ数が 2 になったので、代わりに以下のようなことをしました。
SoapObject response=(SoapObject) envelope.getResponse();
if (response != null) {
Log.i("Message", "the response contains: " + response.toString());
SoapObject diffgram = (SoapObject) response.getProperty("diffgram");
SoapObject NewDataSet = (SoapObject) diffgram.getProperty("NewDataSet");
SoapObject RepInfo = (SoapObject) NewDataSet.getProperty("Rep_x0020_Information");
for (int i = 0; i < RepInfo.getPropertyCount(); i++) {
PropertyInfo info = new PropertyInfo();
RepInfo.getPropertyInfo(i, info);
Log.d("Info", info.name + " : " + RepInfo.getProperty(i).toString());
}
//which gives the following message in LogCat
D/Info(716): Login : InCorrectLogin
D/Info(716): Password : InCorrectPass
最後のループまでに、必要な 2 つのオブジェクトを取得するため、このプロセスは機能しますが、これを行うためのよりクリーンな方法があるように感じます。私が尋ねるのは、このアプリにさらに入ると、より複雑な Web サービス呼び出しが行われるため、取得するためだけにリクエストごとにいくつかの SoapObjects を構築するのではなく、アプリ全体で再利用可能なものを持ちたいからです。欲しい物まで。