2010-06-14 5 views
5

Appel d'un service Web .net SOAP1.1 à partir d'android en utilisant ksoap2 lib J'ai rencontré un problème de distribution de réponse à un objet personnalisé. Par exemple, le code ci-dessous est appelé correct après httpTransport.call (soapAction, soapEnvelope); et avoir des données à l'intérieur. Mais je ne peux pas le lancer sur un objet spécifique ni à SoapObject ou Vector comme je l'ai vu dans plusieurs exemples, je reçois CastException ou rien de simple. Si quelqu'un sait comment faire avec, s'il vous plaît aider.ksoap2 casting getResponse()

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; 
} 

Répondre

5

Essayez d'abord de voir si vous obtenez une réponse. Si ce obj n'est pas nul, essayez ce qui suit.

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

Je suppose que cela devrait fonctionner si vous obtenez une réponse.

Vous devez indiquer à kSOAP quel objet StatusSetting est et how pour convertir une réponse SOAP en objet StatusSetting.

+0

Merci, cela fonctionne, j'ai données dans le SoapObject. Pourriez-vous s'il vous plaît donner une direction pour analyser SoapObject. Je veux dire lire les propriétés en quelque sorte et chercher une donnée dont j'ai besoin. J'ai essayé d'obtenir resultsRequestSOAP.properties cela fonctionne (il obtient comme des données de json) dans le mode de débogage mais les propriétés n'est pas la méthode ouverte à utiliser dans le code. – Maxim

+0

Je connais deux façons d'analyser le SoapObject. 1. Implémentez l'interface 'org.ksoap2.serialization.Marshal' et enregistrez-vous pour la balise SOAP correspondante. 2. Une autre méthode consiste à utiliser les méthodes 'getProperty()' et 'getAttribute()' de SoapObject pour obtenir les valeurs correspondantes. HTH. –

+0

Regardez aussi ceci. http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ –

1

J'espère que ce sera utile pour vous:

SoapObject result = (SoapObject) envelope.bodyIn; 
String response = result.getProperty(0).toString(); 
0

quelque chose comme ça:

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"); 
    } 
}