我正在使用kso​​ap,我想将我的android收集的位置信息发送到ksoap。我想尝试避免制作marshall类等,是否有一种简单的方法来序列化并将double发送给我的soap xml?我试过使用String.valueof但是它会引发一个错误,所以我认为我不能使用它。我向double类型的xml传递double也是一个问题吗?

这是我要发送到的xml文件:

<s:element name="Customerlocation_AddNew">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Token" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Username" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="latitude" type="s:decimal" />
<s:element minOccurs="1" maxOccurs="1" name="longitude" type="s:decimal" />
<s:element minOccurs="1" maxOccurs="1" name="StatusId" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>


和我到目前为止的Java代码:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // set
    request.addProperty("Username", username); // variable name, value. I
                                                // got
    request.addProperty("latitude", String.valueOf(Latitude));

    request.addProperty("longitude", String.valueOf(Longitude));
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11); // put all required data into a soap
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request); // prepare request
    AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);
    httpTransport.debug = true;
    httpTransport.call(SOAP_ACTION, envelope); // send request

    System.out.println("HERE IS THE ENVELOPE "
            + envelope.getInfo("User", "Password"));
    SoapObject result = (SoapObject) envelope.getResponse(); // get
    System.out.println(result);

最佳答案

为什么要避免使用元帅?!有一个MarshalFloat实现,特别是用于运输浮标。如果您真的想要没有Marshal,请看看MarshalFloat实现!在您的情况下,您应该使用以下内容:

request.addProperty("longitude", new BigDecimal(Longitude).toString())

编辑:
记录您的请求\响应以找出问题所在:

 Log.d("test", "request: " + httpTransport .requestDump);
 Log.d("test", "response: " + httpTransport .responseDump);


并尝试以下操作以获得结果对象:

SoapObject result = (SoapObject) envelope.bodyIn;


希望这可以帮助。祝好运!

10-07 12:51
查看更多