Presentation is loading. Please wait.

Presentation is loading. Please wait.

Android智慧型手機程式設計實務應用班

Similar presentations


Presentation on theme: "Android智慧型手機程式設計實務應用班"— Presentation transcript:

1 Android智慧型手機程式設計實務應用班
經濟部工業局 Android智慧型手機程式設計實務應用班 Android WebService 建國科技大學 資管系 饒瑞佶 2012/4

2 WebService 需要ksoap2-android-assembly jar-with-dependencies.jar或ksoap2-android-assembly jar-with-dependencies_timeout1.jar ProjectPropertiesJava Build PathLibraries Add External JARs 需要設定DNS才可以連結有Domain Name的WebService dns解決方法 adb shell #getprop 查看DNS設定 [net.dns1]: [ ] net.dns1 就是目前的設定 setprop net.dns  設定成可以用的 DNS

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

4 現有可以被呼叫的WebService: WebService 攝氏與華氏轉換 取得國家
取得國家

5 攝氏與華氏轉換

6 WebService Step1:建立新專案HelloWS
Step2:main.xml中建立一個輸入框(EditText)、兩個TextView與一個按鈕(Button) EditText TextView TextView Button

7 WebService Step3:加入ksoap2這個外部jar Step4:宣告webservice參數
//有參數值的Web Service ---攝氏與華氏轉換(AVD無法解析domain name) private static final String NAMESPACE = " ; private static final String URL = " private static final String METHOD_NAME = "CelsiusToFahrenheit"; private static final String SOAP_ACTION = " private EditText et_pramater; // 輸入框 private Button btn_ok; // 按鈕 private TextView tv_msg; // 訊息框

8 宣告webservice參數

9 WebService Step5:建立物件

10 webservice主體 相對位置

11 WebService Step6:撰寫webservice主體 // webservice
public 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; } // tempconvert

12 呼叫tempconvert

13 呼叫tempconvert @Override public void onClick(View v) {
// TODO Auto-generated method stub String 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("轉換失敗"); tv_msg.setText(value_return); }

14 相對位置

15 執行結果

16 執行結果

17 錯誤原因 要開放網路存取權限(Manifest.xml) 要設定模擬器的DNS 允許使用jar
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 要設定模擬器的DNS 允許使用jar

18 設定模擬器DNS

19 執行結果

20 執行結果驗證

21 And suggestion or improvement?

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

23 整合ListView 無參數 回傳一組以,為分隔符號的結果
private static final String NAMESPACE = " ; private static final String URL = " private static final String METHOD_NAME = "city"; private static final String SOAP_ACTION = "

24 整合ListView 呼叫Web Service ListView

25 整合Spinner WebService呼叫不變 要加一個有Spinner的layout Spinner

26 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);

27 加入等待進度畫面

28 加入等待進度畫面

29 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();


Download ppt "Android智慧型手機程式設計實務應用班"

Similar presentations


Ads by Google