ksoap2 приведение getResponse () - PullRequest
5 голосов
/ 14 июня 2010

Вызов веб-службы .net SOAP1.1 из android с использованием ksoap2 lib Я столкнулся с проблемой приведения ответа к пользовательскому объекту.Например, приведенный ниже код называется правильным после httpTransport.call (soapAction, soapEnvelope);и есть данные внутри.Но я не могу привести его к определенному объекту ни к SoapObject, ни к Vector, как я видел в нескольких примерах, я получаю CastException или просто ничего.Если кто-то знает, как с этим справиться, помогите.

public StatusSetting[] GetAllStatuses(String installation){
    StatusSetting[] statuses = null;
    String methodName =  "GetAllStatuses";
    String soapAction = NAMESPACE + "/" + methodName;
    SoapObject request = new SoapObject(NAMESPACE, methodName);
    request.addProperty("installation", installation);

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

    AndroidHttpTransport httpTransport = new AndroidHttpTransport(SERVICE_URL);
    try {
        httpTransport.call(soapAction, soapEnvelope);
        statuses = (StatusSetting[])soapEnvelope.getResponse();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return statuses;
}

Ответы [ 3 ]

5 голосов
/ 14 июня 2010

Сначала попробуйте и посмотрите, если вы получаете какой-либо ответ.

Object obj = envelope.bodyIn; 

если это obj не равно нулю, попробуйте следующее.

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;

Полагаю, это должно сработать, если вы получаете какой-то ответ.

Вы должны указать kSOAP, что такое StatusSetting объект, и how, чтобы преобразовать ответ SOAP в StatusSetting объект.

1 голос
/ 24 февраля 2012

Я надеюсь, что это будет полезно для вас:

SoapObject result = (SoapObject) envelope.bodyIn;
String response = result.getProperty(0).toString();
0 голосов
/ 15 августа 2012

что-то в этом роде:

SoapObject response = (SoapObject) envelope.getResponse();
   yourArray=new String[response.getPropertyCount()];

   for(int i=0;i<response.getPropertyCount();i++){    
       Object property = response.getProperty(i);
       if(property instanceof SoapObject){
           SoapObject final_object = (SoapObject) property;
           yourArray[i] = final_object.getProperty("YOUR_PROPERTY_NAME");
    }
}
...