我想編寫一個Android應用程序,它可以顯示從互聯網資源收到(查詢)的一些數據。使用來自webservice的數據的Android應用程序
我想我需要編寫一些邏輯來定期調用並從某個端點獲取數據,解析響應並顯示它。有沒有一個好的教程,所有這些步驟?
我對這方面的Android編程知之甚少,也許最好從簡單的事情開始。我只想知道在學習收集一些資源的同時要尋找什麼。
我想編寫一個Android應用程序,它可以顯示從互聯網資源收到(查詢)的一些數據。使用來自webservice的數據的Android應用程序
我想我需要編寫一些邏輯來定期調用並從某個端點獲取數據,解析響應並顯示它。有沒有一個好的教程,所有這些步驟?
我對這方面的Android編程知之甚少,也許最好從簡單的事情開始。我只想知道在學習收集一些資源的同時要尋找什麼。
你想要做的是開發一個休息API,爲您的Android應用程序提供數據。例如。你的網站有一些你想在你的應用中使用的內容,那麼你可以寫一個PHP腳本,它只是以特定的格式返回這些數據。
E.g. mysite.net/rest/fetchAllLocations.php?maybe_some_parameters
這會返回例如json格式,下面是一個示例,如何顯示:
[{「id」:1,「shop_lng」:8.5317153930664,「shop_lat」:52.024803161621,「shop_zipcode」:33602,「shop_city」:「Bielefeld」, 「shop_street」: 「Arndtstra \ u00dfe」, 「shop_snumber」:3 「shop_name」: 「M \ u00fcller」, 「shop_desc」: 「KAUFHAUS」}]
這裏爲REST API請求的示例:
http://shoqproject.supervisionbielefeld.de/public/gateway/gateway/get-shops-by-city/city/Bielefeld
所以,當你有你的REST API設置您可以處理接收Android手機的數據。我用一個靜態方法來得到這樣的數據:
public class JsonGrabber{
public static JSONArray receiveData(){
String url = "your url";
String result = "";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
HttpResponse res = null;
try {
res = client.execute(method);
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try{
InputStream is = res.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
JSONArray jArray = null;
try{
jArray = new JSONArray(result);
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return jArray;
}
}
那麼這就是全部,一旦你有JSON格式的數據你就必須分析它:
JSONArray test = (JSONArray) JsonGrabber.receiveData()
try {
for(int i=0;i<test.length();i++){
JSONObject json_data = test.getJSONObject(i);
int id = json_data.getInt("id");
}
}
web請求應在另一運行線程,因爲它可能是一個耗時的過程。所以你需要處理AsyncTask。這裏有一些資源:
Painless Threading Multithreading for performance Hello Android Tutorial
非常感謝。這非常有用。我熟悉REST併爲Web應用程序提供其他API。我相信我還需要一些Timer類來安排一些數據輪詢(如果我想自動更新)? – dzida 2010-10-03 16:08:47
我從來沒有使用過定時器來刷新用戶界面,只是在某些事件上更新你的用戶界面,這使得它很簡單 – 2010-10-03 17:26:02
我正在考慮顯示可以說'當前推文'的視圖的應用程序。我認爲它可能會使用一些計時器按計劃的時間間隔自動執行。無論如何,實現定時器不應該是一個問題(我認爲)。 – dzida 2010-10-03 19:46:44