1.用到的jar包為:ksoap2-android-assembly-2.4-jar-with-dependencies.jar
2.效果
3.代碼:
注意:
a.因為android4.0以後不能在主線程中進行http請求,所以需要在Acitivity的onCreate函數中添加以下代碼
if (Build.VERSION.SDK_INT >= 11) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads ().detectDiskWrites().detectNetwork().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); }
b.在AndroidManifest中添加訪問網路的許可權和修改最低版本
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
activity_main.xml代碼如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editTextNum" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="32dp" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/btnSearch" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editTextNum" android:layout_marginTop="42dp" android:text="查詢" /> <TextView android:id="@+id/textViewResult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btnSearch" android:layout_centerVertical="true" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /></RelativeLayout>
MainActivity.java代碼:
package cuit.edu.searchphonedemo;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import android.os.Build;import android.os.Bundle;import android.os.StrictMode;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 {private Button searchButton;private EditText numEditText;private TextView resultTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);searchButton = (Button)findViewById(R.id.btnSearch);numEditText = (EditText)findViewById(R.id.editTextNum);resultTextView = (TextView)findViewById(R.id.textViewResult);searchButton.setOnClickListener(new SearchBtnOnclickListener()); if (Build.VERSION.SDK_INT >= 11) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads ().detectDiskWrites().detectNetwork().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); }}@Overridepublic 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;}class SearchBtnOnclickListener implements OnClickListener{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubString phoneNum = numEditText.getText().toString().trim(); if ("".equals(phoneNum) || phoneNum.length() < 7) { // 輸入的不合規範 Toast.makeText(getApplicationContext(), "輸入手機號不合規範!", Toast.LENGTH_LONG).show(); numEditText.requestFocus(); return; } resultTextView.setText(getRemoteInfo(phoneNum));}} public String 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); 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(endPoint); try { // 調用WebService transport.call(soapAction, envelope); } catch (Exception e) { e.printStackTrace(); } // 擷取返回的資料 SoapObject object = (SoapObject) envelope.bodyIn; // 擷取返回的結果 String result = object.getProperty("getMobileCodeInfoResult") .toString(); return result; }}