介紹

什麼是JSON?,JSON的全名是JavaScript Object Notation,用途是資料交換。之前會使用XML來做資料交換,可是當資料量很多時,XML檔會變很肥大,而JSON是輕量級的資料交換格式。物件是以左大括號 { 開始,右大括號 } 結束。並以key:value的方式來儲存資料,多組的話則以逗號分開,看起來如下

{
  "Data": [
    {
      "Id": "0f4e3749-fdfa-42a3-9023-752e478297db",
      "Name": "雷霆專案"
    },
    {
      "Id": "be92c897-56fa-43b6-9d5b-12aebdc5bbce",
      "Name": "蜂眼專案"
    }
  ]
}

OkHttp是一個網路的應用程式框架,可快速實作資料交換的動作,讓Http連線的過程更有效率。使用OkHttp,可以簡化需先設計AsyncTask、輸出入迴圈或是許多執行緒等工作,讓開發的速度加快。官方網址

gradle設置

加入OkHttp。

compile 'com.squareup.okhttp3:okhttp:3.4.1'

權限設定

在AndroidManifest.xml加入,允許應用程式訪問網路上的信息權限和允許應用程式打開網路,這兩個權限。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

OkHttp讀取JSON

在最外面宣告OkHttpClient。

private OkHttpClient client = new OkHttpClient();

然後在OnCreate裡面實作,如下,執行後會發現,是以非同步的方式執行的,再之後要將資料放進NumberPicker,會是一個問題,這裡先不用管,之後會利用RxJava來解決。

Request request = new Request.Builder().url("你的JSON Url").build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Log.d("OkHttp", json);
            }
        });

執行結果

可以讀取到JSON的資料,如下圖 ParseJson

程式碼已放上Github