2011-11-01 101 views
1

这是调用服务器中的函数执行某些任务的函数。但我必须传入一个ArrayList和一个String值。我无法将ArrayList传递到服务器。谁能告诉我我该怎么办?将自定义对象的ArrayList传递给kSOAP函数

public void findLocation(ArrayList<APData> apdatalist, String profilename){ 
    SoapObject request = new SoapObject(NAMESPACE, "FindLocation"); 

    PropertyInfo quotesProperty = new PropertyInfo(); 
    quotesProperty.setName("profileName"); 
    quotesProperty.setValue(profilename); 
    quotesProperty.setType(String.class); 
    request.addProperty(quotesProperty); 

    request.addProperty("AP_List", APData.class); 

    envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE httpRequest = new HttpTransportSE(URL); 
    httpRequest.debug = true; 
    String result = ""; 

    try 
    { 
     httpRequest.call(SOAP_ACTION, envelope); 
     Log.e("Request",httpRequest.requestDump.toString()); 

     SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
     Log.e("Response",httpRequest.responseDump.toString()); 

     result = response.toString(); 
     if(result == null){ 
      Log.e("AndroidRuntime", "No location result is return!"); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    //return temp; 
} 
+0

工作,你有没有找到一个答案?我也有完全一样的问题。 – Bashorings

+0

对不起...还没有找到解决方案。 – user918197

回答

1

我发现了一个可能的解决方案。我修改了SoapSerializationEnvelope类来处理ArrayList。 我修改的方法 public void writeObjectBody(XmlSerializer writer, KvmSerializable obj)

public void writeObjectBody(XmlSerializer writer, KvmSerializable obj) throws IOException 
{ 
    // Added this code for parsing attributes of KvmSerializable objects 

    int cnt = obj.getPropertyCount(); 
    PropertyInfo info = new PropertyInfo(); 
    for (int i = 0; i < cnt; i++) 
    { 
     Object prop = obj.getProperty(i); 
     if(!(prop instanceof SoapObject)) { 
      // prop is a PropertyInfo 
      obj.getPropertyInfo(i, properties, info); 

      // Added this code to parse ArrayList objects in requests 
      if(prop instanceof ArrayList<?>){ 
       ArrayList<?> values = (ArrayList<?>)prop; 
       for(Object o : values){ 
        writer.startTag(info.namespace, info.name); 
        writeProperty(writer, o, info); 
        writer.endTag(info.namespace, info.name); 
       } 
      }else if ((info.flags & PropertyInfo.TRANSIENT) == 0) 
      { 
       writer.startTag(info.namespace, info.name); 
       writeProperty(writer, obj.getProperty(i), info); 
       writer.endTag(info.namespace, info.name); 
      } 
     } else { 
      // prop is a SoapObject 
      SoapObject nestedSoap = (SoapObject)prop; 
      writer.startTag(nestedSoap.getNamespace(), nestedSoap.getName()); 
      writeObjectBody(writer, nestedSoap); 
      writer.endTag(nestedSoap.getNamespace(), nestedSoap.getName()); 
     } 
    } 
} 

这似乎为我

+0

如何以及在哪里调用此方法 – Umair