ksoap2——WebService客户端调用
WebService简介
WebService是一种基干SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。
Android系统中比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-xxx- dependencies.jar包复制到工程的lib目录中即可使用。
Android调用WebService的步骤
- 指定WebService的命名空间和调用的方法
String nameSpace="http://WebXml.com.cn/";
String methodName="getMobileCodeInfo";
SoapObject rpc=new SoapObject(nameSpace,methodName);
- 设置需调用的WebService接口需要传入参数
rpc.addProperty("","");
- 生成调用WebService方法的SOAP请求信息,并指定SOAP版本
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut=rpc;
envelope.dotNet=true;//设置是否调用的是dotNet开发的WebService
- 创建HttpTransportSE对象
String endPoint="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
HttpTransportSE transportSE=new HttpTransportSE(endPoint);
- 调用WebService
transportSE.call(soapAction,envelope);
- 获取返回的数据、结果
SoapObject object= (SoapObject) envelope.bodyIn;
String result=object.getProperty(0).toString();
查找手机归属地案例
package com.example.volly;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
}
//命名空间
String nameSpace="http://WebXml.com.cn/";
//调用的方法名称
String methodName="getMobileCodeInfo";
//EndPoint
String endPoint="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
//SOAP Action
String soapAction="http://WebXml.com.cn/getMobileCodeInfo";
public void webServiceClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
//指定WebService的命名空间和调用的方法名
SoapObject rpc=new SoapObject(nameSpace,methodName);
//设置需调用的WebService接口需要传入的两个参数mobileCode和userId
rpc.addProperty("mobileCode","13522610430");
rpc.addProperty("userId","");
//生成调用WebService方法的SOAP请求信息,并指定SOAP版本
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut=rpc;
envelope.dotNet=true;//设置是否调用的是dotNet开发的WebService
HttpTransportSE transportSE=new HttpTransportSE(endPoint);
try {
transportSE.call(soapAction,envelope);//调用WebService
} catch (Exception e) {
e.printStackTrace();
}
//获取返回的数据
SoapObject object= (SoapObject) envelope.bodyIn;
//获取返回的结果
String result=object.getProperty(0).toString();
System.out.println(result);
}
}).start();
}
}