iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Kotlin

喝咖啡要30天?一起用 Kotlin 打造尋找好喝咖啡的 App系列 第 7

Day 7 使用 OKHttp 串接全台咖啡廳資料的 API-4 | 非同步執行與 Coroutine

  • 分享至 

  • xImage
  •  

筆者今天稍微看了 Coroutine 並試著實作到專案上,卻怎麼也不成功,太難了吧~~~

覺得可能要花幾天研究下它的原理,今天因為沒有太多時間學習 Coroutine,在加上時程壓力,就算套在程式碼上也是套的一頭霧水,看來是大敵呀!

這邊先上失敗的案例,執行之後畫面就卡住了,筆者肯定是使用方式不正確,在給我一天時間研究研究。

private suspend fun fetchCoffeeShopData(): Deferred<Response> {

    return CoroutineScope(Dispatchers.IO).async {

        // 創建一個 OkHttpClient 實例
        val client = OkHttpClient()

        // 設置要發送的 HTTP 請求
        val request = Request.Builder()
            .url("http://cafenomad.tw/api/v1.2/cafes/taipei")
            .build()

        // 使用 OkHttpClient 發送同步請求
        client.newCall(request).execute()
    }
}

呼叫 fetchCoffeeShopData()

binding.button.setOnClickListener {

    runBlocking {

        try {
            val response = fetchCoffeeShopData().await()

            // 在主線程更新 UI,顯示回應內容
            withContext(Dispatchers.Main) {

                // 檢查回應是否成功
                if (response.isSuccessful) {

                    val shops = response.body?.string()

                    // 這個 Scope 即是在 Android Main Thread 上執行,可以在這裡取得 Server 回傳的資料後更新 UI
                    binding.textView.text = shops
                }
                else {
                    // 處理請求失敗的情況
                    println("Request failed with code: ${response.code}")
                }
            }
        }
        catch (e: Exception) {
            println("Error: ${e.message}")
        }
    }
}

路過的大大歡迎留言需要改寫的地方~~

今日碎念

今天過於輕敵了,如果明天還是沒有太多時間解的話,就讓我們從協程的基本概念開始認識,或是走一遍 Google 的 Codelab:Using Kotlin Coroutines in your Android App

又是13年前的歌
Yes


上一篇
Day6 使用 OKHttp 串接全台咖啡廳資料的 API - 3 | 非同步執行 - Callback
下一篇
Day8 實作 Google Codelab Coroutine - 1
系列文
喝咖啡要30天?一起用 Kotlin 打造尋找好喝咖啡的 App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言