package com.example.usewebservice; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.annotation.SuppressLint; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { /** * * Android平台调用WebService(手机号码归属地查询) * @author yejianping * @date 2014-4-3 * 要先把ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar这个库导入到lib里面 * **/ public EditText text ; public Button button; public TextView tx; public String telephone_number; public MyThread thread; public Handler handler; @SuppressLint("HandlerLeak") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (EditText)findViewById(R.id.editText1); button = (Button)findViewById(R.id.button1); thread = new MyThread(); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 telephone_number = text.getText().toString().trim(); if(telephone_number.equals("")||telephone_number.length()<7) { text.setError("您输入的手机号码(段)有误!"); text.requestFocus(); } else { new Thread(thread).start();; } } }); handler = new Handler() { @SuppressLint("HandlerLeak") public void handleMessage(Message msg) { switch (msg.what) { case 0x01: Bundle bundle = new Bundle(); bundle = msg.getData(); Toast.makeText(MainActivity.this, bundle.getString("result"), Toast.LENGTH_SHORT).show(); } } }; } //创建线程 public class MyThread implements Runnable { public void run() { Looper.prepare();//创建本线程的消息队列并初始化 getTelephoneInfo(telephone_number); Looper.loop();//开始运行消息队列 } } public void getTelephoneInfo(String phone_number) { //命名空间 String nameSpace = "http://WebXml.com.cn/"; //调用的方法名称 String methodName = "getMobileCodeInfo"; // webservice的网址 String URL = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; //命名空间+方法 String soapAction = "http://WebXml.com.cn/getMobileCodeInfo"; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); // 设置需调用WebService接口需要传入的两个参数mobileCode、userId rpc.addProperty("mobileCode", phone_number); rpc.addProperty("userId", ""); // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = true; // 等价于 envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(URL); try { // 调用WebService transport.call(soapAction, envelope); } catch (Exception e) { e.printStackTrace(); } // 获取返回的数据 SoapObject object = (SoapObject) envelope.bodyIn; // 获取返回的结果 String result = object.getProperty("getMobileCodeInfoResult").toString(); Message msg=new Message(); Bundle bundle = new Bundle(); bundle.putString("result", result); msg.setData(bundle); msg.what = 0x01; handler.handleMessage(msg); //return result; // 将WebService返回的结果显示在TextView中 //tx.setText(result); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
xml的代码为;
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:background="@drawable/dd" android:layout_height="fill_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="24dp" android:text="手机号码归属地查询" android:textSize="30sp" android:textStyle="bold" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/textView1" android:layout_marginTop="23dp" android:phoneNumber="true" android:hint="请至少输入你手机号码的前7位" android:ems="10" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="查询" /> </RelativeLayout>