iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Mobile Development

刮掉Web Development的我,與撿到的Android Development系列 第 13

[Lesson13] OkHttp

添加 OkHttp 依賴庫
要使用 OkHttp,必須在 gradle (Module) 層級的 dependencies 中內加入:

implementation 'com.squareup.okhttp3:okhttp:4.9.0'

也可以額外增加以下兩個,監視 API 與 APP 之間的傳輸狀態

implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'

若想將資料轉成 Gson,可以加入:

implementation 'com.google.code.gson:gson:2.8.6'

新增完之後,記得按下Sync Now
https://ithelp.ithome.com.tw/upload/images/20210909/20129566iNgiJIcFC6.png

若想使用最新版本可到 https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp 、https://mvnrepository.com/artifact/com.google.code.gson/gson 查看
https://ithelp.ithome.com.tw/upload/images/20210906/20129566ztjvBAuySZ.png
https://ithelp.ithome.com.tw/upload/images/20210906/201295664RsxM59ohr.png

權限宣告
若需要連線網路,必須在 AndroidManifest.xml 中宣告:

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

https://ithelp.ithome.com.tw/upload/images/20210906/2012956612YuotCNAb.png

OkHttp - GET連線
OkHttp的連線由三個部分組成:

  1. OkHttpClient
    設定連線基底(SSL、TLS、連線憑證)。
  2. Request
    設定 URL 連線網址、請求方式(GET、POST、PUT和DELETE方法)、Header 資訊。
  3. Call
    設定 execute 同步(Synchronous)或 enqueue 非同步(Asynchronous),執行連線後,可獲取到回應的結果資料。
private void sendGet() {
        // 1: 宣告 OkHttpClient
        OkHttpClient client = new OkHttpClient().newBuilder().build();

        // 2: 宣告 Request,要求連到指定網址
        Request request = new Request.Builder()
                .url("https://jsonplaceholder.typicode.com/posts/1")
                .build();

        // 3: 宣告 Call
        Call call = client.newCall(request);

        // 執行 Call 連線後,採用 enqueue 非同步方式,獲取到回應的結果資料
        call.enqueue(new Callback() {

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // 連線成功
                String result = response.body().string();
                Log.d("res",result);
            }

            @Override
            public void onFailure(Call call, IOException e) {
                // 連線失敗
                Snackbar.make(findViewById(R.id.mainLayout),"連線失敗",Snackbar.LENGTH_LONG).show();
            }
        });
    }

OkHttp - POST連線
使用FormBody設置傳送所需的夾帶內容,再將FormBody交給Request,其它部分跟GET大同小異

private void sendPost() {
        OkHttpClient client = new OkHttpClient().newBuilder().build();

        // FormBody放要傳的參數和值
        FormBody formBody = new FormBody.Builder()
                .add("userId", "1")
                .add("id", "1")
                .add("title", "OkHttp post practice")
                .build();

        // 建立Request,設置連線資訊
        Request request = new Request.Builder()
                .url("https://jsonplaceholder.typicode.com/posts")
                .post(formBody) // 使用post連線
                .build();

        // 建立Call
        Call call = client.newCall(request);

        // 執行Call連線到網址
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // 連線成功
                String result = response.body().string();
                Log.d("result", result);
            }

            @Override
            public void onFailure(Call call, IOException e) {
                // 連線失敗
                Snackbar.make(findViewById(R.id.mainLayout),"連線失敗",Snackbar.LENGTH_LONG).show();
            }
        });
    }

謝謝大家願意花時間閱讀,小弟弟我在此鞠躬/images/emoticon/emoticon41.gif


上一篇
[Lesson12] RecyclerView
下一篇
[Lesson14] Retrofit
系列文
刮掉Web Development的我,與撿到的Android Development30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言