2016-07-24 92 views
0

我在Android中使用kso​​ap2的Web客戶端,但我無法將字符串數組作爲參數傳遞給webservice。我附上了我的代碼和服務。如何使用kso​​ap2將數組值的字符串傳遞給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

您將需要兩個自定義可擴展集合的可序列化類你想持有的類型。它也應該實施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

完美!這工作 –