筆者今天稍微看了 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