5

ksoap2 lib を使用して Android から .net SOAP1.1 Web サービスを呼び出すと、応答をカスタム オブジェクトにキャストするという問題が発生しました。たとえば、以下のコードは、httpTransport.call(soapAction, soapEnvelope); の後に正しく呼び出されます。内部にデータがあります。しかし、いくつかの例で見たように、SoapObject または Vector のどちらにも特定のオブジェクトにキャストすることはできません。対処法を知っている方がいましたら、助けてください。

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

3 に答える 3

5

まずは反応があるか試してみてください。

Object obj = envelope.bodyIn; 

これobjが null でない場合は、次を試してください。

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;

私の推測では、何らかの応答が得られれば、これは機能するはずです。

kSOAP にStatusSettingオブジェクトとは何かを伝えhow、SOAP 応答をStatusSettingオブジェクトに変換する必要があります。

于 2010-06-14T15:27:09.623 に答える
1

これがお役に立てば幸いです:

SoapObject result = (SoapObject) envelope.bodyIn;
String response = result.getProperty(0).toString();
于 2012-02-24T10:03:30.400 に答える
0

そんな感じ:

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");
    }
}
于 2012-08-15T11:35:55.247 に答える