在基於Axis2做android Webservice開發的時候一般情況下大家接受webservice伺服器傳回值的時候都是使用
SoapObject soapObject = (SoapObject) envelope.getResponse();這個來接受返回來的值,但這種方法往往會產生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive這樣的錯誤。
根據本人親自測試和使用,在伺服器端傳回值是String類型的數值的時候使用SoapObject soapObject = (SoapObject)
envelope.getResponse();和 SoapObject result = (SoapObject)envelope.bodyIn;這兩種方法來接受值都會報出
java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive這樣的錯誤。 我們可以使用 Object object =
envelope.getResponse();就可以解決這種錯誤。
如果伺服器傳回值的類型是byte[] 的時候,使用Object object = envelope.getResponse();和SoapObject result = (SoapObject)
envelope.bodyIn;都不會發生錯誤現象,但是在使用Object object = envelope.getResponse();取回來的值在使用base64進行解碼和編碼的時候會報出錯誤。如果使用SoapObject result = (SoapObject)envelope.bodyIn;就可以完整的將byte[]進行解碼和編碼
,byte[] ops = Base64.decode(result.getProperty(0).toString());至於在用SoapObject soapObject = (SoapObject)
envelope.getResponse();來接受byte[]傳回值,由於時間關係我沒有進行測試。。。有興趣的人可以一起討論。
這是經過我一晚上的測試和綜合別人研究的結果進行總結的。