Serialize an array of ints to send using KSOAP2

后端 未结 7 1420
借酒劲吻你
借酒劲吻你 2021-01-06 01:41

I\'m having a problem trying to send an array of ints to a .NET web service which expects an array in one of the arguments. That\'s at least what I understand from the API d

相关标签:
7条回答
  • 2021-01-06 01:59

    For me this works passing the Array elements one by one in a loop

    public List<Integer> intsEnvio;
    for(int i: intsEnvio){
        request.addProperty("clases", i);
    }
    
    0 讨论(0)
  • 2021-01-06 02:02

    For me this works

    SoapObject soapCompanies = new SoapObject(NAMESPACE, "listcardIDs");
                for (int i=0;i<passed.getListCardIds().size()-1;i++) {
                    soapCompanies.addProperty("int", passed.getListCardIds().get(i));
                }
                soapObject.addSoapObject(soapCompanies);
                //soapObject.addPropertyIfValue("listCardIDs", soapCompanies);
                soapObject.addProperty("userID", passed.getuserId());
                soapObject.addProperty("gender", passed.isgender());
    
    0 讨论(0)
  • 2021-01-06 02:14

    Just pass parameter name and value like this in loop :

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);
    HttpTransportSE ht = new HttpTransportSE(URL);
    for (int i=0; i<itemId.length; i++){
        request.addProperty("itemId",itemId[i]);
    }
    ht.call(SOAP_ACTION, envelope);
    

    Just pass itemId as parameter name in loop and value in loop.

    0 讨论(0)
  • 2021-01-06 02:20

    I'm sending from an Android client to a .NET server, this worked for me

    SoapObject myArrayParameter = new SoapObject(NAMESPACE, MY_ARRAY_PARAM_NAME);
    for( int i : myArray ) {
        PropertyInfo p = new PropertyInfo();
        p.setNamespace("http://schemas.microsoft.com/2003/10/Serialization/Arrays");
        // use whatever type the server is expecting here (eg. "int")
        p.setName("short");
        p.setValue(i);
        myArrayParameter.addProperty(p);
    }
    request.addSoapObject(myArrayParameter);
    

    Produces

     <classificationIds>
         <n4:short i:type="d:long" xmlns:n4="http://schemas.microsoft.com/2003/10/Serialization/Arrays">18</n4:short>
     </classificationIds>
    

    Which looks terrible, but the server eats it anyway

    0 讨论(0)
  • 2021-01-06 02:21

    It is a known issue with the KSOAP2 for Android library, which at the moment simply does not support arrays. The issue description is here:

    http://code.google.com/p/ksoap2-android/issues/detail?id=19

    A third-party patch, solution and an example can be found here:

    http://people.unica.it/bart/ksoap2-patch/

    I personally haven't tested any of them as they require also changing the web service WSDL but apparently they address the issue.

    0 讨论(0)
  • 2021-01-06 02:24

    Here is nice example that might help you:

    http://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks

    Here is my quick fix to this issue:

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
    
    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
    soapEnvelope.setOutputSoapObject(Request);
    soapEnvelope.dotNet = true;
    
    
    List<Integer> companies =  new ArrayList<Integer>();
    companies.add(65);
    companies.add(66);
    companies.add(67);
    
    Request.addProperty("name", "test1");
    SoapObject soapCompanies = new SoapObject(NAMESPACE, "companies");
    for (Integer i : companies){
        soapCompanies.addProperty("int", i);
    }
    Request.addSoapObject(soapCompanies);
    

    Output XML:

    <n0:companies xmlns:n0 = "http://tempuri.org/">
                <int i:type = "d:int">65</int>
                <int i:type = "d:int">66</int>
                <int i:type = "d:int">67</int>
    </n0:companies>
    <name i:type = "d:string">test1</name>
    
    0 讨论(0)
提交回复
热议问题