使用Volley取得政府資料開放平台JSON格式

By | 2016-11-07

 

關於Volley類別庫

早期開發Android程式,連線到網路皆透過內建的 HttpURLConnection,或HttpClient,由於HttpURLConnection不怎麼好用,需要額外處理的事太多,除了改用第三方類別庫外,一部份開發者仍會使用內建的 Apache HttpClient 類別庫。

2013年Google I/O發表了Volley,Volley是個輕量的HTTP Request類別庫,用以取代HttpURLConnection及HttpClient,於是在推出 Android 6.0時,斷然移除內建的Apache HttpClient。Volley類別庫適合處理通訊頻繁且資料量不大的傳輸作業。

本例將從台北市政府資料開放平台下載「臺北捷運轉乘停車場座標」,並標示在地圖上。

一、導入類別庫

開啟專案,在build.gradle(Module: app) 導入類別庫 Volley,目前官方放到JCenter最後一版為 1.0.0,在此使用已修定一些bug的非官方版。

二、讀取開放資料 (open data)

政府資料開放平台提供了許多有用資訊,市面上不少好用的APP資料皆來自open data。在此,我們希望能取得台北捷運週邊停車場資訊,進而標示在地圖上。

第2行:資料來源政府開放平台 —「臺北捷運轉乘停車場座標」

第3行:使用JsonObjectRequest類別要求JSON資料。

第5-11行:Velloy採非同步作業,匿名類別 Response.Listener  監聽回應

第12-17行:匿名類別Response.ErrorListener 監聽錯誤

第16行:由於Velloy使用Queue(佇列)方式處理網路通訊,不須管它怎麼傳送、何時傳送,只要把工作加到Queue裡就行,當執行結束會自動通知匿名類別Response.Listener。實務應用上應在APP裡產生一個queue的Singleton物件,讓整個應用程式隨處可取得。為了測試方便,在此直接呼叫Volley.newRequestQueue,然後將jsonObjectRequest物件加進佇列。

最後別忘了在AndroidManifest.xml加上可存取網路權限。

此方法僅能取得 JsonObject,若回傳資料內容為 JsonArray 請改用 JsonArrayRequest,否則會執行onErrorResponse。

三、解析JSON內容、標示在地圖上

資料回傳如下:

mag_volley_open_data_json_01

從回傳資料內容可見,我們所要截取的內容為下方紅色區塊。

第3行:取得停車場資訊主體資料,放到JSONArray

第4-11行:逐筆取得停車場地點

第6-9行:將取得地點標示到地圖上

執行畫面如下:

mag_volley_open_data_json_02  mag_volley_open_data_json_03

 

 

相關文章:

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *