Простой способ сериализации двойного? - PullRequest
2 голосов
/ 22 сентября 2011

Я использую ksoap и хочу отправить информацию о местоположении, собранную моим android, в ksoap. Я хочу попытаться избежать создания класса маршала и т. Д. Есть ли простой способ сериализации и отправки двойника в мой файл XML? Я пытался использовать String.valueof, однако он выдает ошибку, поэтому я предполагаю, что не могу использовать это. Также проблема заключается в том, что я передаю значение типа double в xml типа decimal?

Это 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);

1 Ответ

1 голос
/ 22 сентября 2011

Почему вы хотите избежать использования маршала ?!Существует специальная реализация 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;

Надеюсь, это поможет.Удачи!

...