プロジェクトの一環として、ksoap2を使用してJava(Axis)のWebサービスにアクセスする必要があります。そのWebサービスはCustomerオブジェクトのベクトルを返します。私の問題はAndroidのKsoap2でそのベクトルを処理できないことです。私は多くの方法を試しました。それを行う方法がわかりません。ksoap2でのマーシャリングについて読みました。それは私の問題を解決するために必要ですか?もしそうなら、どうすればKsoap2でベクターをマーシャリングできますか?誰か助けてください……
2 に答える
取得したい複雑なオブジェクトのクラス(ベクトルのアイテム)を登録すると、ksoap2は変換を試み、SoapObjectsを含むベクトルではなく、登録されたクラスのオブジェクトを含むベクトルを提供します。クラスをksoapに登録するには、プロパティにアクセスしてWebサービスから取得した値を割り当てることにより、応答内のオブジェクトを逆シリアル化できるKvmSerializableをクラスに実装する必要があります。クラスに応じて、いくつかのマーシャルも登録する必要がある場合があります(たとえば、クラスのint、Double、およびFloatフィールドを逆シリアル化するため)。
登録は次の方法で行うことができます。
envelope.addMapping(namespace, typeName, clazz);
namespace idが型の名前空間(wsdlにあります)である場合、typenameは型の名前(wsdlにも表示されます)であり、clazzは登録するクラスです。
お役に立てれば!
私のプロジェクトでは、ここで説明されているように、ksoap2 の回答からオブジェクトを手動で解析しました 。
基本的に、回答として受け取った SoapObject を繰り返し処理し、Customer オブジェクトを構築します。
Category[] categories = new Category[soap.getPropertyCount()];
for (int i = 0; i < categories.length; i++) {
SoapObject pii = (SoapObject)soap.getProperty(i);
Category category = new Category();
category.CategoryId = Integer.parseInt(pii.getProperty(0).toString());
category.Name = pii.getProperty(1).toString();
category.Description = pii.getProperty(2).toString();
categories[i] = category;
}
コードは seesharpgears から取得したもので、クレジットはそこにあります。応答の解析にまだ問題がある場合は、さらに詳しい情報が必要になります (例: xml-response...)。