在Google搜尋"REST" & "Android"的介接方式不外乎是下面這篇文章的做法
Article : Android and REST
Link : http://www.majidkhosravi.com/android-rest/
不知為何照做都沒錯,實際運行時就是接不到RESTful web service(以下簡稱REST)。無奈問了同事也是類似的方式,頂多加了延遲的秒數,讓Android的執行緒可以等待REST response而不會timeout,後來才發現是Android 3以上就不支援
Android and REST作法,正確且符合Android多執行緒宗旨的做法應該是改用
AnsyncTask
那又為什麼同事的可以,我的Android Application Project卻不行呢?!
因為我手癢把
android:minSdkVersion調到超高,而同事的minSdkVersion向下支援到2.3所以可以運行無誤(菸)
以下來說明AnsyncTask如何實作
● 在\AndroidManifest.xml加權限
< uses-permission android:name="android.permission.INTERNET">
● src按右鍵→New→Class
替Class取個名稱(Name),Package則選擇當下Project對應的Package Name
● 選擇Superclass
在前一畫面的Superclass點選Browser..按鈕,開啟Superclass Selection視窗
● 搜尋AsyncTask
在Choose Type的input textbox輸入AsyncTask,選擇android.jar提供的AsyncTask
● 產生Rest.java檔案
可以從檔案中觀察此class已經繼承AsyncTask(extends AsyncTask)
● 實作產生Rest.java檔案
定義Params、Progress、Result的型別,定義如下
Params:呼叫這支class時傳入的值
Progress:這支class運作時的進度
Result:class運作後產生的資料
Rest.java我希望設計成User傳入一個String類型的URL,回傳HttpEntity類型的資料,至於描述執行進度的Progress則不需要回傳任何值。
所以這三個重要的參數是這樣設計的
Params:String類型的URL
Progress:不需要執行進度
Result:HttpEntity類型的資料
所以最後的樣子是
AsyncTask< String, Void, HttpEntity>
利用Eclipse提供的
quick fixes快速實作介面
將介接REST的程式碼撰寫於quick fixes產生的
doInBackground中
● 在Activity呼叫
最後這樣呼叫就好