一、获取并使用KSOAP包
在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService库非常丰富,但这些对Android来说过于庞大。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。
KSOAP2 地址:http://code.google.com/p/ksoap2-android/
我下载的最新的是: ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
注意:
我在使用ksoap2-android时犯了一个低级错误:使用时报错误:The import org.ksoap2 cannot be resolved。
当时分析这个问题时一直以为是Eclipse出了问题,找了好多方法都不行,
实际是我下载的ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar文件是错误的导致的,走了弯路。
在 http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2 页面 通过鼠标右键链接另存为存的是同名的一个纯文本的Html文件。而不是我们想要的。
我是在
http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar 点 View raw file 才正确下载对应文件的。
public static String ContactGetTableString(String functionName) {//传入WebService方法名
// WebService地址
final String NAMESPACE = "http://www.yhcc.com.cn";//WebService命名空间
// String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarn/service/padDataChangeService?wsdl";
String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarncity/service/dataChangeService?wsdl";
final String METHOD_NAME = functionName;//调用WebService的方法名
String SOAP_ACTION = "http://www.yhcc.com.cn/"+functionName;
String returnString = null;
try {
//生成调用Webservice方法的SOAP请求信息
/**
* 创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
该版本号需要根据服务端WebService的版本号设置。
在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,
该属性的值就是在第一步创建的SoapObject对象。
*/
SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = true;//注意:如果没有参数,这里设置成true,如果有参数,这里设置成false
envelope.setoutputSoapObject(rpc);
//创建HttpTransportsSE对象
HttpTransportSE ht = new HttpTransportSE(URL,10000);
ht.debug = true;
//使用call方法调用WebService方法
ht.call(SOAP_ACTION,envelope);
/**
* 获得WebService方法的返回结果
有两种方法:
1、使用getResponse方法获得返回数据。
private SoapObject detail;
detail =(SoapObject) envelope.getResponse();
2、使用 bodyIn 及 getProperty。
private SoapObject detail;
SoapObject result = (SoapObject)envelope.bodyIn;
detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult");
*/
SoapObject result = (SoapObject)envelope.bodyIn;
//从result中找到return的值,即:return="abd",result.getProperty("return").toString()="abd";
returnString = result.getProperty("return").toString();
} catch (Exception e) {
returnString=ErrorCode.ErrorCode;
e.printstacktrace();
}
return returnString;
}
2.有参数的情况下:
public static String ContactGetTableString(String functionName,String AreaNum) {//传入WebService方法名和参数
final String NAMESPACE = "http://www.yhcc.com.cn";
String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarncity/service/dataChangeService?wsdl";
final String METHOD_NAME = functionName;
String SOAP_ACTION = "http://www.yhcc.com.cn/"+functionName;
String returnString = null;
try {
SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME);
//addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
rpc.addProperty("arg0",AreaNum);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = false;//注意:如果没有参数,这里设置成true,如果有参数,这里设置成false
envelope.setoutputSoapObject(rpc);
HttpTransportSE ht = new HttpTransportSE(URL,10000);
ht.debug = true;
ht.call(SOAP_ACTION,envelope);
SoapObject result = (SoapObject)envelope.bodyIn;
returnString = result.getProperty("return").toString();
} catch (Exception e) {
returnString=ErrorCode.ErrorCode;
e.printstacktrace();
}
return returnString;
}
需要修改 AndroidManifest.xml 文件,赋予相应权限
简单来说就是增加下面这行配置:<uses-permission android:name="android.permission.INTERNET"></uses-permission>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。