2016-01-15 35 views
2

我試圖返回一個對象數組KSOAP 我得到的錯誤在這行:java.lang.ClassCastException:java.util.Vector中不能轉換到org.ksoap2.serialization.SoapObject

result = (SoapObject) envelope.getResponse(); 

有我的代碼:

public static List<Smartphone> GetAllSmart() { 
    SoapObject result=null; 
    try { 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new 
        StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 


     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = false; 
     envelope.setOutputSoapObject(request); 
     //envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     result = (SoapObject) envelope.getResponse(); 
    } catch (IOException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } catch (XmlPullParserException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } catch (NetworkOnMainThreadException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } 
    return RetrieveFromSoap(result); 
} 


public static List<Smartphone> RetrieveFromSoap(SoapObject soap) { 
    ArrayList<Smartphone> ss = new ArrayList<Smartphone>(); 
    for (int i = 0; i < soap.getPropertyCount(); i++) { 
     Smartphone smart = new Smartphone(); 
     int j=0; 
     for(j=0; j<6;j++){ 
      smart.setProperty(j, soap.getProperty(i)); 
     } 
     ss.add(smart); 
    } 
    return ss; 
} 

感謝烏拉圭回合的幫助..

回答

0

我的解決辦法

Vector<SoapObject> result = null; 
    ArrayList<Smartphone> ss = new ArrayList<Smartphone>(); 
    Smartphone smart; 
    try { 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new 
        StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 


     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = false; 
     envelope.setOutputSoapObject(request); 
     //envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

     envelope.addMapping(NAMESPACE, "Smartphone", new Smartphone().getClass()); 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     result = (Vector<SoapObject>) envelope.getResponse(); 
     int length = result.size(); 
     for (int i = 0; i < length; ++i) { 
      SoapObject so = result.get(i); 
      smart = new Smartphone(); 
      for (int j = 0; j < so.getPropertyCount(); j++) { 
       smart.setProperty(j, so.getProperty(j)); 
      } 
      ss.add(smart); 
     } 

    } catch (IOException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } catch (XmlPullParserException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } catch (NetworkOnMainThreadException e) { 
     Log.d("Error", "Some exception occurred", e); 
    } 
4

在我的情況下,來自web服務的響應因列表和單個對象而異。所以,我必須同時使用

Vector<SoapObject> result = (Vector<SoapObject>) envelope.getResponse(); 

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

這樣用下面的代碼來處理這兩種情形。

try { 
    httpTransport.call(esbRequest.getAction(), envelope, headerList); 

    result = (Vector<SoapObject>) envelope.getResponse(); 

} catch (SoapFault soapFault) { 
    LOGGER.error("Soap Fault Exception " + soapFault); 

} catch (IOException ioException) { 
    LOGGER.error("IOException " + ioException); 

} catch (XmlPullParserException parserException) { 
    LOGGER.error("XmlPullParserException " + parserException); 

} catch (Exception exception) { 
    LOGGER.error("Exception " + exception); 

    try { 
    response = (SoapObject) envelope.getResponse(); 
    } catch (SoapFault e) { 
    // TODO Auto-generated catch block 
    LOGGER.error("Soap Fault Exception " + e); 

    } 

} 
相關問題