Android OkHttp 教學 (Kotlin 篇)

常見的 HTTP 網路資料請求連線套件

名稱參考資料
HttpURLConnectionhttps://developer.android.com/reference/java/net/HttpURLConnection
Volleyhttps://developer.android.com/training/volley
OKHttphttps://square.github.io/okhttp/
Retrofithttps://square.github.io/retrofit/

OkHttp 官方介紹與使用教學

https://square.github.io/okhttp/

添加 OkHttp 依賴庫 (dependencies)

在 GRADLE (Module) 層級 dependencies 內加入:

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

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

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

若想使用最新版本可以到 mvnrepository 查看最新版號:

權限宣告 (permissions)

連線網路,需在 AndroidManifest.xml 中宣告:

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

JSONPlaceholder 假資料網站

這一次範例我們將使用 JSONPlaceholder 所提供的假資料 RESTful API 來做串接練習。

JSONPlaceholder 提供六種常用資源,如:貼文、照片、用戶…等假資料、。

還有 GET、POST、PUT、PATCH、DELETE 等 HTTP 請求方法可以使用。

其中可以透過呼叫 https://jsonplaceholder.typicode.com/posts 可以得到回應格式為 json 的資料。

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  ...
  ...
  ...
]

Post 資料類別

根據上面的 json 回應資料,我們可以設計出我們的 Post.java 資料類別為:

data class Post(
    var id: String,
    var title: String,
    var body: String,
    var userId: String
)

OkHttp 基本拉資料方式

val client = OkHttpClient()
val request = Request.Builder()
    .url("https://jsonplaceholder.typicode.com/posts")
    .build()

client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call, e: IOException) {
        Log.d("HKT", e.toString())
    }

    override fun onResponse(call: Call, response: Response) {
        Log.d("HKT", "response: ${response.body?.string()}")
    }
})

OkHttp 將資料轉 Gson 方式

val client = OkHttpClient()
val request = Request.Builder()
    .url("https://jsonplaceholder.typicode.com/posts")
    .build()

client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call, e: IOException) {
        Log.d("HKT", e.toString())
    }

    override fun onResponse(call: Call, response: Response) {
        val resStr = response.body?.string()
        val posts: List<Post> = Gson().fromJson(resStr, Array<Post>::class.java).toList()
        for (item in posts) {
            Log.d("HKT", "id: " + item.id)
            Log.d("HKT", "title: " + item.title)
            Log.d("HKT", "body: " + item.body)
            Log.d("HKT", "userId: " + item.userId)
        }
    }
})

常見錯誤

Q1

Trying to parse JSON data from URL : Unable to resolve host “jsonplaceholder.typicode.com”: No address associated with hostname

若發生以上類似錯誤,有可能你忘記在 AndroidManifest 宣告,使用網路權限,另外一個就是你的網路不通。

贊助我們

創作不易,知識無價,免費線上教學就像顆種子,希望藉由您的支持與贊助,能夠無後顧之憂的日漸茁壯,努力前行堅持下去。不論捐贈金額的大小,我們都由衷的感謝每位贊助者,都是我們推廣知識、開放共享知識最大的動力!

您的捐贈將用於:請作者喝杯咖啡,鼓勵繼續創作,持續上傳教學影片與更多新技術文章。

Line Pay 打賞


(由 Line Pay 支付平台,提供一卡通轉帳服務)

街口打賞


(由街口行動支付平台,提供轉帳服務)

超商代碼繳費打賞

(由綠界科技支付平台,提供超商繳費代碼)


相關連結

HKT 線上教室 每週六日 更新影片
▶ YouTube 頻道
https://goo.gl/3f2pJi
▶ KT 線上教室 臉書粉絲團
https://goo.gl/27H9Li
▶ Udemy 頻道
http://bit.ly/2ZNdnrt
▶ 贊助我們
https://goo.gl/FiKXAu

從零開始學 Dart 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/32toHt3

Flutter 程式設計入門實戰 30 天 線上影片教學(完整版)
🎬 http://bit.ly/2t1SjBu

從零開始學 Java 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/376wXCx

從零開始學 kotlin 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/2ODUanq

APP / Dart / Flutter / Android Studio
Android / iOS / Java / Kotlin / 教學 / 開發

這個網誌中的熱門文章

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)

Android Studio 歷代版本下載點

nano 文字編輯器

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)