【Android 入門開發實戰:口罩地圖】封裝 OkHttp

 

【Android 入門開發實戰:口罩地圖】線上免費講義課程目錄

這一個小節 KT 簡單封裝了 OkHttp。使用單例模式(Singleton)確保 OkHttpClient 只有一個實例存在,減少連線反應延遲與降低記憶體空間,改善提高整體運行效能。這次只簡單封裝 get 功能,若未來還需要更多 OkHttp 相關功能,如:需要 post 或是上傳檔案、下載進度狀態…等,可以再進行功能擴充。

OkHttpUtil

自定義 OkHttpUtil,封裝 OkHttp,簡化繁雜步驟的程式碼,之後呼叫變得很簡單俐落。

import okhttp3.*
import okio.IOException


class OkHttpUtil {
    private var mOkHttpClient: OkHttpClient? = null

    companion object {
        val mOkHttpUtil: OkHttpUtil by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            OkHttpUtil()
        }
    }

    init {
        //Part 1: 宣告 OkHttpClient
        mOkHttpClient = OkHttpClient().newBuilder().build()
    }

    //Get 非同步
    fun getAsync(url: String, callback: ICallback) {
        //Part 2: 宣告 Request,要求要連到指定網址
        val request = with(Request.Builder()) {
            url(url)
            get()
            build()
        }

        //Part 3: 宣告 Call
        val call = mOkHttpClient?.newCall(request)

        //執行 Call 連線後,採用 enqueue 非同步方式,獲取到回應的結果資料
        call?.enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                callback.onFailure(e)
            }

            @Throws(IOException::class)
            override fun onResponse(call: Call, response: Response) {
                callback.onResponse(response)
            }
        })


    }


    interface ICallback {
        fun onResponse(response: Response)

        fun onFailure(e: IOException)
    }
}

使用方式

val your_url_name = "your_url"
   

mOkHttpUtil.getAsync(your_url_name, object : OkHttpUtil.ICallback {
    override fun onResponse(response: Response) {

    }

    override fun onFailure(e: okio.IOException) {

    }
})

Constants 常數檔案

未來會有很多常數固定資料,為了更好管理與維護,我們習慣會將常數資料,特別獨立出去放到如: Constants.kt。以這次口罩資料網址為例,我們就可以將它整理歸納寫到這個檔案裡。而固定常數的命名風格,習慣全大寫,單字與單字之間透過底線
區隔,如:PHARMACIES_DATA_URL。

package com.thishkt.pharmacydemo

const val PHARMACIES_DATA_URL="https://raw.githubusercontent.com/thishkt/pharmacies/master/data/info.json"

參考資料

OkHttpClients Should Be Shared
https://square.github.io/okhttp/4.x/okhttp/okhttp3/-ok-http-client/#okhttpclients-should-be-shared

程式碼範例

範例名稱:獲取口罩資料,改使用封裝過的_OkHttp
開發人員:HKT (侯光燦)
程式語言:Kotlin
開發環境:Android Studio 4.1.1 & Android 11 & Kotlin 1.4.21
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載

這個網誌中的熱門文章

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

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

nano 文字編輯器

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

16天記下7000單字