2010-10-02 51 views
2

我想編寫一個Android應用程序,它可以顯示從互聯網資源收到(查詢)的一些數據。使用來自webservice的數據的Android應用程序

我想我需要編寫一些邏輯來定期調用並從某個端點獲取數據,解析響應並顯示它。有沒有一個好的教程,所有這些步驟?

我對這方面的Android編程知之甚少,也許最好從簡單的事情開始。我只想知道在學習收集一些資源的同時要尋找什麼。

回答

3

你想要做的是開發一個休息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

+0

非常感謝。這非常有用。我熟悉REST併爲Web應用程序提供其他API。我相信我還需要一些Timer類來安排一些數據輪詢(如果我想自動更新)? – dzida 2010-10-03 16:08:47

+0

我從來沒有使用過定時器來刷新用戶界面,只是在某些事件上更新你的用戶界面,這使得它很簡單 – 2010-10-03 17:26:02

+0

我正在考慮顯示可以說'當前推文'的視圖的應用程序。我認爲它可能會使用一些計時器按計劃的時間間隔自動執行。無論如何,實現定時器不應該是一個問題(我認爲)。 – dzida 2010-10-03 19:46:44

相關問題