2016-07-24 25 views
0

私はksoap2を使用してAndroidにWebクライアントを持っていますが、文字列配列をパラメータとしてWebサービスに渡すことはできません。私は以下のコードとサービスを添付しています。どのようにksoap2を使用して配列値の文字列をwebserviceに渡すのですか?

サービス:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mys="http://182.73.50.69:6510/Myservice" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays "> 
 
     <soapenv:Header/> 
 
     <soapenv:Body> 
 
      <mys:addworkload> 
 
      <!--Optional:--> 
 
      <mys:member>Antony</mys:member> 
 
      <!--Optional:--> 
 
      <mys:prj> 
 
       <!--Zero or more repetitions:--> 
 
       <arr:string>Prj1</arr:string> 
 
       <arr:string>Prj2</arr:string> 
 
       <arr:string>Prj3</arr:string> 
 
      </mys:prj> 
 
      <!--Optional:--> 
 
      <mys:val> 
 
       <!--Zero or more repetitions:--> 
 
       <arr:int>2</arr:int> 
 
       <arr:int>2</arr:int> 
 
       <arr:int>2</arr:int> 
 
      </mys:val> 
 
      <!--Optional:--> 
 
      <mys:date>2016-05-29</mys:date> 
 
      </mys:addworkload> 
 
     </soapenv:Body> 
 
    </soapenv:Envelope>

のAndroidコード:私はここにリンクをしないのですどこ

SoapObject Search= new SoapObject(Constants.NAMESPACE, "addworkload"); 
     List<String> companies = new ArrayList<>(); 
     companies.add("Prj1"); 
     companies.add("Prj2"); 
     companies.add("Prj3"); 

     List<String> ones = new ArrayList<>(); 
     ones.add("2"); 
     ones.add("2"); 
     ones.add("2"); 

     SoapObject soapCompanies = new SoapObject(Constants.NAMESPACE, "prj"); 
     for (String i : companies){ 
      soapCompanies.addProperty("string", i); 
     } 
     request.addSoapObject(soapCompanies); 

     SoapObject val = new SoapObject(Constants.NAMESPACE, "val"); 
     for (String i : ones){ 
      val.addProperty("int", i); 
     } 
     request.addSoapObject(val); 

親切に教えてくれ..

+0

これを使用するには? –

答えて

1

あなたは2つのカスタムが必要になりますcollectioを継承するシリアライズ可能なクラスあなたが保持したいタイプのn。また、KvmSerializableも実装する必要があります。整数アレイについてStringアレイ、

public class CustomKvmSerializable extends Vector<String> implements KvmSerializable { 

    private String tag; 
    private Class klass; 

    public CustomKvmSerializable(String tag, Class klass) { 
     this.tag = tag; 
     this.klass = klass; 
    } 

    @Override 
    public Object getProperty(int i) { 
     return this.get(i); 
    } 

    @Override 
    public int getPropertyCount() { 
     return 1; 
    } 

    @Override 
    public void setProperty(int i, Object o) { 
     this.add(o.toString()); 
    } 

    @Override 
    public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) { 
     propertyInfo.name = tag; 
     propertyInfo.type = klass; 
    } 

    @Override 
    public String getInnerText() { 
     return null; 
    } 

    @Override 
    public void setInnerText(String s) { 

    } 
} 

ため

クラスVector<Integer>に延びる同様のクラスを作成します。

は、あなたが私の解決策を確認してきたねえ、あなたの要求に

ArrayList<PropertyInfo> props = new ArrayList<>(); 

// For string array 
CustomKvmSerializable stringVector = new CustomKvmSerializable("string", String.class); 
for(String str : yourStringArray){ 
    stringVector.add(str); 
} 
PropertyInfo instrumentInfo = new PropertyInfo(); 
instrumentInfo.setName("prj"); 
instrumentInfo.setValue(stringVector); 
instrumentInfo.setType(stringVector.getClass()); 
props.add(instrumentInfo); 

// For integer array 
CustomKvmSerializable integerVector = new CustomKvmSerializable("int", String.class); 
for(Integer integer : yourIntegerArray){ 
    integerVector.add(integer); 
} 
PropertyInfo instrumentInfo = new PropertyInfo(); 
instrumentInfo.setName("val"); 
instrumentInfo.setValue(integerVector); 
instrumentInfo.setType(integerVector.getClass()); 
props.add(instrumentInfo); 

あなたが要求を作成し、

SoapObject search = new SoapObject(Constants.NAMESPACE, "addworkload"); 

// Add the properties to your request 
for (PropertyInfo property : props) { 
    request.addProperty(property); 
} 
+0

完璧!この作品 –

関連する問題