[ 開放資料part3 ] [android] 利用Volley在Android取得JSON字串(網路)

在開放資料part1、part2中所使用的方式為利用EXCEL以及臨時API網址,
那現在我們要來透過Volley,利用網址,來得到JSON字串囉

那現在就~開始囉!

六步驟發想
1.導入Volley
2.開啟網路權限
3.使用ListView來呈現
4.利用JsonObjectRequest類別來要求JSON資料
5. 以匿名類別Response.Listener/ErrorListener來進行監聽回應與錯誤
6.解析呈現方式


Step1.導入Volley(build.gradle-app)
volley是個輕量的HTTP Request類別庫,而volley類別庫適合處理通訊頻繁且資料量不大的傳輸作業。

implementation 'com.android.volley:volley:1.1.0'

















(注意,舊版的gradle是使用 compile 'com.mcxiaoke.volley:library:1.1.0',所以在建專案的時候就要注意自己的版本喔


Step2.開啟網路權限 (在AndroidManifest.xml中)
<uses-permission android:name="android.permission.INTERNET"/>




Step3.建立ListView
在activity_main.xml中加入ListView,並為他設立id“lv”
(一開始將ListView直接丟進layout中,卻沒看到文字,不要緊張!
為他設立id後就會出現了,因為這件事花了很多時間的自己....)
Step4.要求JSON資料並進行監聽事件
在這邊我們需要分成幾個步驟
1.匯入 ListView lv 與JSON資料的網址
protected ListView lv;
String url = "http://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=a880adf3-d574-430a-8e29-3192a41897a5";

2.建立onCreate事件

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = findViewById(R.id.lv);
    getData(url);
}
3.建立getData方法

private String getData(String urlString) {
    String result = "";
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
            urlString, null,
            new Response.Listener<JSONObject>() {

                @Override                public void onResponse(JSONObject response) {
                    Log.d("回傳結果", "結果 = " + response.toString());
                            try {
                                parseJSON(response);
                            } catch (JSONException e) {
                                e.printStackTrace(); }}},

                new Response.ErrorListener() {
                @Override                public void onErrorResponse(VolleyError error) {
                    Log.e("回傳結果", "錯誤訊息:" + error.toString()); } } );

    Volley.newRequestQueue(this).add(jsonObjectRequest);
    return result;}



由於Velloy使用Queue(佇列)方式處理網路通訊,不須管它怎麼傳送、何時傳送,只要把工作加到Queue裡就行,當執行結束會自動通知匿名類別Response.Listener。
到這邊是不是覺得很難緊張非常害怕呢~不要擔心,因為我們已經快完成了!接著就來進行解析吧~
Step5.解析JSON資料
在這邊我們要解析JSON資料來回傳到listview中,
所以先想想要怎麼呈現在listview呢?
在這邊我呈現的方式為
_id:1      項次:1
停車場名稱:xx停車場
經度:xxxxx
緯度:yyyyy
好了~這樣就很清楚自己想要怎麼來分解了
那接著我們就來看程式碼囉
private void parseJSON(JSONObject jsonObject) throws JSONException {
   ArrayList<String> list = new ArrayList();
    JSONArray data = jsonObject.getJSONObject("result").getJSONArray("results");

    for (int i = 0; i < data.length(); i++) {
        JSONObject o = data.getJSONObject(i);
        String str = "_id:" + o.getString("_id") + "    "                + "項次:" + o.getString("項次") + "\n"                + "停車場名稱:" + o.getString("停車場名稱") + "\n"                + "經度:" + o.getString("經度(WGS84)") + "\n"                + "緯度:" + o.getString("緯度(WGS84)");
        list.add(str);
    }
    lv.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list));
}
Step6.執行結果
















將將~這樣就完成了~
在這邊呢我有調整過版面的位置以及顏色並且增加了Textview
大家有空練習的時候可以試試看改Json值的顏色喔~

留言

這個網誌中的熱門文章

[unity2D] 透過鍵盤進行上下左右移動

[unity 2D] 簡單認識button(上)

[ 開放資料part1 ] [android] 利用EXCEL檔案格式來取得開放資料吧