本文主要采用KSOAP2-Android的方式访问WebService。
采用WebService的地址:
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx
如下:
package com.easyway.android.ws; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; /** * * Android平台调用WebService(手机号码归属地查询) * * * 添加Ksoap2android的方式如下: * 1.在eclipse创建user library * 2.点击项目选择“Build Path”的“Configurtion Biuid Path ” * 3.点击相关的" add libray "选择相关的jar对一个的library即可 * * * * WebService的路径如下: * http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo * * 采用KSOAP2Android 调用WebService服务需要采用知道WebService相关的信息如下 * 命名空间 * String nameSpace = "http://WebXml.com.cn/"; * 调用的方法名称 * String methodName = "getMobileCodeInfo"; * EndPoint * String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; * SOAP Action * String soapAction = "http://WebXml.com.cn/getMobileCodeInfo"; * * * 联网相关的服务必须(Android2.2以上的版本 )两个条件: * 1.添加网络访问的权限 * <uses-permission android:name="android.permission.INTERNET"/> * 2.添加网络访问的策略 * //添加版本兼容性的网络访问限制性模式 * //设置相关的线程模式 * StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() * .detectDiskReads() * .detectDiskWrites() * .detectNetwork() // or .detectAll() for all detectable problems * .penaltyLog() * .build()); * //设置相关的虚拟机策略 * StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() * .detectLeakedSqlLiteObjects() * //.detectLeakedClosableObjects() * .penaltyLog() * .penaltyDeath() * .build()); * * * * @author longgangbai * * @date 2011年11月29日16:26:54 */ public class AndroidQueryTelCodeWSActivity extends Activity { private EditText phoneSecEditText; private TextView resultView; private Button queryButton; /** * */ @Override public void onCreate(Bundle savedInstanceState) { //添加版本兼容性的网络访问限制性模式 //设置相关的线程模式 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); //设置相关的虚拟机策略 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() //.detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); super.onCreate(savedInstanceState); this.setTitle(AndroidQueryTelCodeWSActivity.class.getName()); //获取手机屏幕大小的设置 getMobileSize(); //设置相关的内容视图布局 setContentView(R.layout.main); //初始化视图的方法 initView(); //设置事件的监听器器方法 setEventListener(); } /** * 设置视图的信息 */ private void initView() { // phoneSecEditText = (EditText) findViewById(R.id.phone_sec); resultView = (TextView) findViewById(R.id.result_text); queryButton = (Button) findViewById(R.id.query_btn); } /** * 设置事件的监听方法 */ private void setEventListener() { queryButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 手机号码(段) String phoneSec = phoneSecEditText.getText().toString().trim(); // 简单判断用户输入的手机号码(段)是否合法 if ("".equals(phoneSec) || phoneSec.length() < 7) { // 给出错误提示 phoneSecEditText.setError("您输入的手机号码(段)有误!"); phoneSecEditText.requestFocus(); // 将显示查询结果的TextView清空 resultView.setText(""); return; } // 查询手机号码(段)信息 getRemoteInfo(phoneSec); } }); } /** * 获取手机的屏幕的大小的方法 */ private void getMobileSize() { //Android开发中经常需要获得手机屏幕的大小, //常用的方法就是用 DisplayMetrics 类来获取手机画面宽高 DisplayMetrics displaysMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics); //设置手机的标题 setTitle("手机屏幕分辨率:" + displaysMetrics.widthPixels + "*" +displaysMetrics.heightPixels) ; } /** * 手机号段归属地查询 * * @param phoneSec 手机号段 */ public void getRemoteInfo(String phoneSec) { // 命名空间 String nameSpace = "http://WebXml.com.cn/"; // 调用的方法名称 String methodName = "getMobileCodeInfo"; // EndPoint String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; // SOAP Action String soapAction = "http://WebXml.com.cn/getMobileCodeInfo"; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); // 设置需调用WebService接口需要传入的两个参数mobileCode、userId rpc.addProperty("mobileCode", phoneSec); // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = true; // 等价于envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(endPoint); try { // 调用WebService transport.call(soapAction, envelope); } catch (Exception e) { e.printStackTrace(); } // 获取返回的数据 SoapObject object = (SoapObject) envelope.bodyIn; String result =null; // 获取返回的结果 if(object==null){ result="没有查询到相关的区域 "; }else{ result =object.getProperty(0).toString(); } // 将WebService返回的结果显示在TextView中 resultView.setText(result); } }