[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/okhttphttps://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


<<:  Day 28 「最好避免犯错的方法」单元测试与 GitFlow、主线开发

>>:  Day14|【Git】档案管理 - 档案还原 git reset

[Lesson26] Kotlin - Inheritance

如果类别要被继承,可以使用 open 修饰 open class Person(var name :...

[Day 16] TFLM + BLE Sense + MP34DT05 就成了迷你智慧音箱(上)

学了半个月终於要端出「爆浆濑尿虾牛丸」了吗?要开始让大家体会一下牛肉(MCU)的鲜、濑尿虾(AI)的...

成为工具人应有的工具包-17 MyLastSearch

MyLastSearch 今天来看看这顾名思义就知道是要看我的搜寻纪录的工具,可以很直觉的想到用在查...

Day 26 批次网路影片下载工具 - youtube-dl-server

说到百花齐放的网路影片平台中,若有批次下载离线观看在 Youtube, Facebook, vime...

Kotlin Android 第23天,从 0 到 ML - CameraX

前言: 今天来介绍如何创建使用 CameraX 来显示预览 大纲 : build.gradle(ap...