一、前提
1、在PC端创建WebService服务,别忘了记下WebService服务的URL地址,相关步骤可参照百度的相关教程。
2、可将WebsService服务发布至外网或内网,若条件有限,只求实现功能,最简单的办法:
(1)在PC端通过”猎豹免费WiFi“等软件开启网络热点,由移动设备连接。
(2)在移动端开启热点,由PC端连接。
(3)使用AVD模拟器无需考虑,默认的AVD模拟器与PC端ip地址一致。
即只要保持移动设备与PC设备ip一致即可。
3、在Android工程文件的Libs目录引入Ksoap2框架的jar包,如:
4.在Android工程文件的AndroidManifest.xml中加入网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
扫描二维码关注公众号,回复:
2393381 查看本文章
二、编写Android代码
(1)Handler代码:
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case 0:
Toast.makeText(GeneralAccessibilityRecommend.this, "连接服务器失败", Toast.LENGTH_LONG).show();
default:
break;
}
}
};
(2)获取数据代码:
private void GetData() {
final String SERVICE_NS = "http://tempuri.org/";//命名空间
final String SOAP_ACTION = "http://tempuri.org/getHosInfo";//用来定义消息请求的地址,也就是消息发送到哪个操作
final String SERVICE_URL = "http://192.168.xx.xxx/mulu/WebService.asmx";//URL地址,这里写发布的网站的本地地址
String methodName = "getInfo"//调用的WebService的方法名;
//创建HttpTransportSE传输对象,该对象用于调用Web Service操作
final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
ht.debug = true;
//使用SOAP1.1协议创建Envelop对象。从名称上来看,SoapSerializationEnvelope代表一个SOAP消息封包;但ksoap2-android项目对
//SoapSerializationEnvelope的处理比较特殊,它是HttpTransportSE调用Web Service时信息的载体--客户端需要传入的参数,需要通过
//SoapSerializationEnvelope对象的bodyOut属性传给服务器;服务器响应生成的SOAP消息也通过该对象的bodyIn属性来获取。
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//实例化SoapObject对象,创建该对象时需要传入所要调用的Web Service的命名空间、Web Service方法名
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
soapObject.addProperty("Info",department);
//对dotnet webservice协议的支持,如果dotnet的webservice
envelope.dotNet = true;
//调用SoapSerializationEnvelope的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前两步创建的SoapObject对象设为
//SoapSerializationEnvelope的付出SOAP消息体
envelope.bodyOut = soapObject;
new Thread(){
@Override
public void run() {
try {
//调用WebService,调用对象的call()方法,并以SoapSerializationEnvelope作为参数调用远程Web Service
ht.call(SOAP_ACTION, envelope);
if(envelope.getResponse() != null) {
//获取服务器响应返回的SOAP消息,调用完成后,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个
//SoapObject对象,该对象就代表了Web Service的返回消息。解析该SoapObject对象,即可获取调用Web Service的返回值
SoapObject so = (SoapObject) envelope.bodyIn;
// 获取子节点
SoapObject soapChilds = (SoapObject) so.getProperty(0);
ArrayList<Map<String, String>> data = new ArrayList<Map<String, String>>();
if (soapChilds != null) {
int size = soapChilds.getPropertyCount();
if (size > 0) {
Map<String, String> map=null;
//若获取的数据为多列数据,可采用以下方式进行处理
for (int i = 0; i < soapChilds.getPropertyCount(); i++) {
int tag = i % 3;
switch (tag) {
case 0: {
list1.add(soapChilds.getProperty(i).toString());
}
break;
case 1: {
list2.add(Double.parseDouble(soapChilds.getProperty(i).toString()));
}
break;
case 2: {
list3.add(Double.parseDouble(soapChilds.getProperty(i).toString()));
}
break;
default:
break;
}
}
}
}
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
}
else{
Message msg=new Message();
msg.what=0;
handler.sendMessage(msg);
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
}.start();
}