本文主要采用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);
}
}