android webservice

29
Android WebService 建建建建建建 建建建 建建建 2012/4 建建建建建建 Android 建建建建建建建建建建建建建建

Upload: baird

Post on 07-Feb-2016

81 views

Category:

Documents


0 download

DESCRIPTION

經濟部工業局 Android 智慧型手機程式設計實務應用班. Android WebService. 建國科技大學 資管系 饒瑞佶 2012/4. WebService. 需要 ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-with-dependencies_timeout1.jar Project Properties Java Build PathLibraries  Add External JARs - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Android WebService

Android WebService

建國科技大學 資管系饒瑞佶2012/4

經濟部工業局Android 智慧型手機程式設計實務應用班

Page 2: Android WebService

WebService• 需要 ksoap2-android-assembly-2.5.2-jar-with-

dependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-with-dependencies_timeout1.jar– ProjectPropertiesJava Build PathLibraries Add

External JARs

• 需要設定 DNS 才可以連結有 Domain Name 的 WebServicedns 解決方法– adb shell – #getprop 查看 DNS 設定– [net.dns1]: [192.168.2.1] net.dns1 就是目前的設定 – setprop net.dns1 168.95.1.1 設定成可以用的 DNS

Page 3: Android WebService

幾個重點• 沒有參數的 WebService• 有參數的 WebService• DNS 問題

Page 4: Android WebService

WebService

• 現有可以被呼叫的 WebService :–攝氏與華氏轉換• http://www.w3schools.com/webservices/tempconvert.asmx

–取得國家• http://www.webserviceX.NET/country.asmx

Page 5: Android WebService

攝氏與華氏轉換

Page 6: Android WebService

WebService• Step1 :建立新專案 HelloWS• Step2 : main.xml 中建立一個輸入框

(EditText) 、兩個 TextView 與一個按鈕 (Button)

EditTextTextView

TextView

Button

Page 7: Android WebService

WebService

• Step3 :加入 ksoap2 這個外部 jar• Step4 :宣告 webservice 參數// 有參數值的 Web Service --- 攝氏與華氏轉換 (AVD 無法解析 domain name)private static final String NAMESPACE = "http://tempuri.org/" ;private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";private static final String METHOD_NAME = "CelsiusToFahrenheit";private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";

private EditText et_pramater; // 輸入框private Button btn_ok; // 按鈕private TextView tv_msg; // 訊息框

Page 8: Android WebService

宣告 webservice 參數

Page 9: Android WebService

WebService

• Step5 :建立物件

Page 10: Android WebService

webservice 主體

相對位置

Page 11: Android WebService

WebService

• Step6 :撰寫 webservice 主體// webservicepublic String tempconvert(String aa){String receivedString1="nok"; // 預設回傳值 try { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("Celsius", aa); // 傳入帳號 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); envelope.dotNet = true; HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,TimeOut); androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive Result = (SoapPrimitive)envelope.getResponse(); receivedString1=Result.toString(); }catch(Exception e) { receivedString1="nok"; return receivedString1; }return receivedString1;}//---------------------------tempconvert--------------------------

Page 12: Android WebService

呼叫 tempconvert

Page 13: Android WebService

呼叫 tempconvert@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString to_be_transfered;to_be_transfered=et_pramater.getText().toString();String value_return;

if(to_be_transfered==null || "".equals(to_be_transfered)){tv_msg.setText(" 您沒有輸入轉換值 ");et_pramater.setFocusable(true);}else{ value_return=tempconvert(to_be_transfered); if(value_return=="nok"){ tv_msg.setText(" 轉換失敗 "); }else{ tv_msg.setText(value_return); }}}

Page 14: Android WebService

相對位置

Page 15: Android WebService

執行結果

Page 16: Android WebService

執行結果

Page 17: Android WebService

錯誤原因• 要開放網路存取權限 (Manifest.xml)– <uses-permission

android:name="android.permission.INTERNET"></uses-permission>

• 要設定模擬器的 DNS• 允許使用 jar

Page 18: Android WebService

設定模擬器 DNS

Page 19: Android WebService

執行結果

Page 20: Android WebService

執行結果驗證

Page 21: Android WebService

And suggestion or improvement?

Page 22: Android WebService

My Suggestion

• 試試另一個取得國家代號的 webservice• 選用只能輸入數字的 EditText• 加入等待訊息或進度畫面• 將結果帶到下一個 Activity 做顯示• 回傳結果不只一筆,分割資料後,再用

ListActivity 做顯示• 將結果存入 SQLite• …

Page 23: Android WebService

整合 ListView

• 無參數• 回傳一組以 , 為分隔符號的結果

private static final String NAMESPACE = "http://tempuri.org/" ; private static final String URL = "http://211.20.52.86/map_ap_1/city.asmx"; private static final String METHOD_NAME = "city"; private static final String SOAP_ACTION = "http://tempuri.org/city";

Page 24: Android WebService

整合 ListView

呼叫 Web Service

ListView

Page 25: Android WebService

整合 Spinner

• WebService 呼叫不變

Spinner

要加一個有 Spinner 的 layout

Page 26: Android WebService

Spinner sp=(Spinner)findViewById(R.id.spinner1);

// 建立一個 ArrayAdapter 物件,並放置下拉選單的內容 ArrayAdapter<String> adapter = new ArrayAdapter<String>( WS_Spinner.this,android.R.layout.simple_spinner_item, cities ); // 設定下拉選單的樣式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp.setAdapter(adapter);

Page 27: Android WebService

加入等待進度畫面

Page 28: Android WebService

加入等待進度畫面

Page 29: Android WebService

private void createCancelProgressDialog(String title, String message, String buttonText) {MyDialog = new ProgressDialog(this);MyDialog.setTitle(title);MyDialog.setMessage(message);MyDialog.setButton(buttonText, new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which){ // Use either finish() or return() to either close the activity or just the dialog MyDialog.dismiss(); return; }});MyDialog.show();}