1.简介
Android中的WebService 是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方类库(KSOAP2)来调用WebService。下面通过一个例子演示如何使用KSOAP2来调用WebService。
2.效果演示
3.直接贴代码吧,看注释
/*** @author 王树伟* * 可按如下6步来调用WebService的方法。*/
public class MainActivity extends Activity {private Button send;private EditText et;private String value;private TextView text;String regularExpression = "^1[3-8]\\d{9}";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private Handler handler = new Handler(){public void handleMessage(Message msg) {switch (msg.what) {case 1:String valueOk = (String) msg.obj;text.setText(valueOk);break;case 2:String valueFs= (String) msg.obj;text.setText(valueFs);break;case 3:Toast.makeText(getApplicationContext(), "请输入正确的手机号码", 0).show();break;}}};/*** 初始化*/private void initView() {send = (Button) findViewById(R.id.btn);et = (EditText) findViewById(R.id.et);text = (TextView) findViewById(R.id.text);send.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {value = et.getText().toString().trim();/*** 需要注意的一点 子线程!*/new Thread(){public void run() {//比对是否满足手机号标准>>>正则表达式if(value.matches(regularExpression)){//只有符合标准才会调用方法getWebServicesValue(value);}else {handler.sendEmptyMessage(3);}}}.start();}});}/*** webservices* @param value*/private void getWebServicesValue(String value) {String url= "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx";String mothor = "getMobileCodeInfo";/*** 1. 指定WebService的命名空间和调用的方法名* * 第1个参数表示WebService的命名空间* * 第2个参数表示要调用的WebService方法名。*/SoapObject object = new SoapObject("http://WebXml.com.cn/", mothor);/*** 2. 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。* * 第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,* 只要设置参数的顺序一致即可。*/object.addProperty("mobileCode", value);/*** 3. 生成调用WebService方法的SOAP请求信息* * 设置SOAP协 议的版本号*/SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);envelope.bodyOut = object;envelope.dotNet = true;//支持.net开发的服务器System.out.println("----1---");/*** 4. 创建HttpTransportSE对象*/HttpTransportSE se = new HttpTransportSE(url);try {/*** 5. 使用call方法调用WebService方法* * 第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象*/se.call("http://WebXml.com.cn/"+mothor, envelope);System.out.println("----2----");/*** 6. 使用getResponse方法获得WebService方法的返回结果 * * 注意此处是在子线程,所以注意更新UI在此处是不可以的 */if(envelope.getResponse()!=null){System.out.println("---3---");Object object2 = (Object)envelope.getResponse();Message message = new Message();message.what = 1;message.obj = object2.toString();System.out.println("---obj---"+object2);handler.sendMessage(message);}else {Message message = new Message();message.what = 2;handler.sendMessage(message);}} catch (IOException e) {e.printStackTrace();} catch (XmlPullParserException e) {e.printStackTrace();}}
}
xml就不贴了,很简单的布局
4.注意
因为用到访问网络,所以权限一定不要忘记加!
<uses-permission android:name="android.permission.INTERNET"/>
5.Demo
点我跳转过去