編輯:關於Android編程
最近在學習Android,隨著移動設備的流行,當軟件走上商業化的道路,為了爭奪市場,肯定需要支持Android的,所以開始接觸了Android,不過只了解皮毛就好,因為我們要做管理者嘛,懂點Android,管理起來容易些。
Android學起來也簡單,封裝的更好了,一個個的控件,像是又回到了VB的趕腳。
下面將通過一個示例講解如何在Android平台調用Web Service。我們使用互聯網現成的Webservice,供查詢手機號碼歸屬地的Web service,它的WSDL為http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl。
1)新建Android工程,引入上面下載的ksoap2-android類庫
在Android平台調用WebService需要依賴於第三方類庫ksoap2,它是一個SOAP Webservice客戶端開發包,主要用於資源受限制的Java環境如Applets或J2ME應用程序(CLDC/ CDC/MIDP)。
而在Android平台中我們並不會直接使用ksoap2,而是使用ksoap2android。KSoap2 Android 是Android平台上一個高效、輕量級的SOAP開發包
2)編寫布局文件res/layout/main.xml
3)編寫MainActivity類
/** * Android平台調用WebService(手機號碼歸屬地查詢) * */ public class MainActivity extends Activity { private EditText phoneSecEditText; private TextView resultView; private Button queryButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 強制在UI線程中操作 StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build()); StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath() .build()); phoneSecEditText = (EditText) findViewById(R.id.phone_sec); resultView = (TextView) findViewById(R.id.result_text); queryButton = (Button) findViewById(R.id.query_btn); 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); } }); } /** * 手機號段歸屬地查詢 * * @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); rpc.addProperty("userId", ""); // 生成調用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 = object.getProperty(0).toString(); // 將WebService返回的結果顯示在TextView中 resultView.setText(result); } }
注意點1:nameSpace、methodName 、EndPoint和SOAP Action 信息,都可以在WSDL中得到。
注意點2:調用WebService接口方法需要傳入的參數時,參數名稱要和WSDL中描述的一致。(網上有些資料說在需要傳入多個參數時,只要多個參數的順序與WSDL中參數出現的順序一致即可,名稱並不需要和WSDL中的一致,但實際測試發現,大多數情況下並不可行!)
注意點3: 本例中調用WebService後返回的結果如下所示:
這裡明明返回的是xml格式的內容,為什麼我們不需要通過解析xml來獲取我們需要的內容呢?其實:
//獲取返回的數據
SoapObject object = (SoapObject) envelope.bodyIn;
ksoap2能夠將返回的xml轉換成SoapObject對象,然後我們就可以通過操作對象的方式來獲取需要的數據了。
注意點4:本例中只返回了一個值,但有些WebService會返回多個值該怎麼獲取?獲取方法與本例完全一樣,只是需要注意的是如果是返回多個值,通過第100代碼object.getProperty(0);得到的可能仍然是一個SoapObject。不斷地調用getProperty()方法;總能得到你想要的全部結果。
4)在AndroidManifest.xml中配置添加訪問網絡的權限
5)運行結果
源碼下載
http://download.csdn.net/detail/tcl_6666/7365311
在用dialogfragment的時候我們可能會不喜歡系統自帶的黑色邊框, @drawable/my_try_use_pay_dialog
前言在移動互聯網浪潮中,聯網APP已經把單機拍死在沙灘上,很多公司都希望自家應用能夠有一套帳號系統,可是許多用戶卻並不一定買賬:我憑啥注冊你家應用的帳號?微博
先看效果圖圓面的繪制: package test.com.opengles8_1;import java.nio.ByteBuffer;import java.
調試手機應用程序一般先用模擬器來實現,只是因為每次都發布到手機上調試太麻煩了。當應用程序在模擬器上調試沒錯後,再發布到手機運行驗證就行了。一、模擬器創建方式為了在模擬器中