问题
I am calling a web service from my android client application. After getting response when i am trying to display it i am getting ClassCastException. Following is my code:
public void onClick(View v) {
setContentView(R.layout.report);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
EpcDetails epcdetails=new EpcDetails();
epcdetails.setEpcId(input_val.getText().toString());
request.addProperty("id", id
SoapSerializationEnvelope sse=new SoapSerializationEnvelope(SoapEnvelope.VER11);
sse.setOutputSoapObject(request);
sse.addMapping(NAMESPACE,
ProductDetailsRequest.ProductDetailsRequest.getSimpleName(),
ProductDetailsRequest.ProductDetailsRequest);
sse.implicitTypes=true;
sse.setAddAdornments(false);
AndroidHttpTransport aht=new AndroidHttpTransport(URL);
try
{
aht.call(SOAP_ACTION, sse);
SoapObject response= (SoapObject) sse.getResponse();
item_code.setText((CharSequence)(response.getProperty(6)));
desc.setText((CharSequence) (response.getProperty(5)));
price.setText(calc_price.toString());
} catch (IOException e)
{
e.printStackTrace();
} catch (XmlPullParserException e)
{
e.printStackTrace();
}
I am getting Exception at item_code.setText((CharSequence)(response.getProperty(6))); as
12-20 19:26:12.864: ERROR/AndroidRuntime(811): FATAL EXCEPTION: main
12-20 19:26:12.864: ERROR/AndroidRuntime(811): java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at com.trueVUE.modules.report.MainSimulation.onClick(MainSimulation.java:123)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.view.View.performClick(View.java:2408)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.view.View$PerformClick.run(View.java:8816)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.os.Handler.handleCallback(Handler.java:587)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.os.Handler.dispatchMessage(Handler.java:92)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.os.Looper.loop(Looper.java:123)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at java.lang.reflect.Method.invokeNative(Native Method)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at java.lang.reflect.Method.invoke(Method.java:521)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-20 19:26:12.864: ERROR/AndroidRuntime(811): at dalvik.system.NativeStart.main(Native Method)
Please suggest some soln ASAP.
Regards, Rahul
回答1:
because the type of your webservice return is String ,so you can solve it this way:
Object response= sse.getResponse();
when your webservice return values type is byte[] ,you can do it
SoapObject response=(SoapObject)envelope.bodyIn;
回答2:
May be your web service is returning an XML object which is causing ClassCastException at client's end as it is not supported by KSOAP, try returning result of your web service as a String(preferably with CDATA) and your problem would get solved.
回答3:
This question will be helpful to you.
You need to use getString() to convert a returned property into a String:
item_code.setText(response.getProperty(6).toString());
来源:https://stackoverflow.com/questions/4490505/java-lang-classcastexception-org-ksoap2-serialization-soapprimitive