写了一个简单的webservice遇到一个纠结的问题,大家帮帮忙。
主要就是不理解envelope.getResponse()方法返回到Object对象为什么转换成SoapObject 就会出现这个报错。
java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive网上很多这样的代码都是可以通过的啊!
注:已配置网络访问权限。
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Main extends Activity 
{
public static final String TAG = "Main";
    
Button btnSearch = null;
TextView tvResult = null;

String serviceUrl = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
String namespace = "http://WebXml.com.cn/";
String methodName = "getMobileCodeInfo";
@Override
public void onCreate(Bundle savedInstanceState)
{
Log.i(TAG, "开始布局");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "布局空间");
tvResult = (TextView) this.findViewById(R.id.tvResult);
btnSearch = (Button) this.findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(listener);
Log.i(TAG, "布局结束"); }

Button.OnClickListener listener = new Button.OnClickListener()
{ @Override
public void onClick(View v) {
Log.i(TAG, "进入Button");
SoapObject request = new SoapObject(namespace, methodName);
request.addProperty("mobileCode", "15868752458");
request.addProperty("userID", null);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet=true; //envelope.bodyOut = request;
envelope.setOutputSoapObject(request);
AndroidHttpTransport ht=new AndroidHttpTransport(serviceUrl);
Log.i(TAG, "开始try");
try
{
Log.i(TAG, "进入try");
ht.call(namespace + methodName, envelope);
Log.i(TAG, "开始if" + envelope.getResponse());
if (envelope.getResponse() != null)
{
Log.i(TAG, "进入if");
SoapObject soapObject = (SoapObject) envelope.getResponse();
String result = soapObject.toString();
Log.i(TAG, result);
tvResult.setText(result);

// 使用Object就没有问题了,可以获取到数据
//Object object = envelope.getResponse();
//Log.i(TAG, object.toString());
//tvResult.setText(object.toString());

}
else {
Log.i(TAG, "进入else");
tvResult.setText("没有获得响应.");
Log.i(TAG, "没有获得响应");
}
}
catch (Exception e)
{
tvResult.setText(e.toString());
Log.i(TAG, e.toString());
}
}};
}