Запрос о разборе XML в Android - PullRequest
0 голосов
/ 13 февраля 2012

Я работаю над приложением для Android, в котором мне нужно получать данные из веб-службы .Net. Первоначально методы веб-сервиса возвращают простые строки. Это нормально, мой код работает нормально и извлекает строки плавно. Но моя проблема начинается, когда методы возвращают объектыЯ знаю, что объект содержит данные в форме XML. Я также подтвердил это отладкой своего кода, результирующий объект содержит данные, приведенные ниже.

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Body>

<UserInfoResponse xmlns="http://tempuri.org/">

<UserInfoResult>

<UserName>Himanshu</UserName>

<Email>Himanshu@XXXXXXXX.com</Email>

</UserInfoResult>

</UserInfoResponse>

</soap:Body>

</soap:Envelope>

и мой код для использования веб-службы: -

public void objData(){

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);
        Log.d("request", request.toString());

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        Log.d("envelope", envelope.toString());

        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        Log.d("envelope", envelope.toString());

        HttpTransportSE aht = new HttpTransportSE(URL);
        aht.debug=true;
        Log.d("aht", aht.toString());

        try
        {
            aht.call(OBJ_SOAP_ACTION, envelope);
            SoapPrimitive results = (SoapPrimitive)envelope.getResponse();
            System.out.println("results="+results);
            tv4.setText(""+results);
        }
        catch (Exception e)
        {
            tv4.setText(e.getClass().toString());
            Log.d("Error",e.getClass().toString());
        }

    }

Объект results содержит данные XML. Теперь моя проблема заключается в том, что при печати данныхэтот объект с помощью кода tv4.setText(""+results); дает мне class java.lang.ClassCastException. Я знаю, что это неправильный подход для получения XML-данных объекта, я должен его проанализировать. Но я не знаю, как анализировать объект. Так что, пожалуйста, помогите мнеДля анализа xml содержал объект. Любая помощь будет высоко ценится. Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Вы не можете использовать SoapPrimitive для сложного объекта, вы должны разыграть ответ, как показано ниже

SoapObject response = (SoapObject) envelope.getResponse();

Тогда, если вы хотите привести его к объекту-сущности (аналогично объекту, который вы отправляете через веб-сервис .net), вы должны сделать это следующим образом.

Класс сущности

public class EmLogin {

private String _id;

private String _pwd;


public EmLogin() {
}

public String getId() {
    return _id;
}

public void setId(String id) {
    this._id = id;
}

public String getPwd() {
    return _pwd;
}

public void setPwd(String pwd) {
    this._pwd = pwd;
}

//this is the place you are setting the SoapObject as a param
public EmLogin(SoapObject so) throws ParseException {

    this._id = so.getProperty("Id").toString();// these are the properties of your xml objs
    this._pwd = so.getProperty("PasswordHash").toString();

}}

способ установки полученного мыльного объекта в класс сущности следующим образом.

* * 1010
0 голосов
/ 13 февраля 2012

Чтобы получить сложные объекты данных из мыла, определите объект как KvmSerializale, реализовав KvmSerializable, см. Ссылку:

http://seesharpgears.blogspot.in/2010/10/ksoap-android-web-service-tutorial-with.html

http://seesharpgears.blogspot.in/2010/11/implementing-ksoap-marshal-interface.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...