iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
Mobile Development

Jetpack Compose 從心開始系列 第 17

Jetpack Compose 從心開始 Day17 -從網際網路取得資料

  • 分享至 

  • xImage
  •  

前言

    Compose 是 Android UI 工具包,而 Retrofit 則是一個型別安全的 HTTP 客户端,用於 Android 和 Java。將這兩者結合,我們可以輕鬆地從網際網路擷取 JSON 格式的資料,並將其顯示在 Compose UI 上。

新增 Retrofit 依附元件

build.gradle.kts (Module :app)

// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
// Retrofit with Scalar Converter
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")

建立 Retrofit 服務

建立介面: 定義一個介面,其中包含用於發送網路請求的方法。

interface MarsApiService {
    @GET("photos")
    fun getPhotos(): String
}

建立 Retrofit 實例:

private val retrofit = Retrofit.Builder()
   .addConverterFactory(ScalarsConverterFactory.create())
   .baseUrl(BASE_URL)
   .build()

在viewmodel 建立getMarsPhotos()函式:

private fun getMarsPhotos() {
   viewModelScope.launch {
       marsUiState = try {
           val listResult = MarsApi.retrofitService.getPhotos()
           MarsUiState.Success(listResult)
       } catch (e: IOException) {
           MarsUiState.Error
       }
   }
}

建立 Compose 函式:

fun HomeScreen(
   marsUiState: MarsUiState,
   modifier: Modifier = Modifier
) {
    when (marsUiState) {
        is MarsUiState.Loading -> LoadingScreen(modifier = modifier.fillMaxSize())
        is MarsUiState.Success -> ResultScreen(
            marsUiState.photos, modifier = modifier.fillMaxWidth()
        )

        is MarsUiState.Error -> ErrorScreen( modifier = modifier.fillMaxSize())
    }
}

執行結果

https://ithelp.ithome.com.tw/upload/images/20240927/20121643Lbl2w65Sju.png


上一篇
Jetpack Compose 從心開始 Day16 - Android 中的協同程式
下一篇
Jetpack Compose 從心開始 Day18 - 載入並顯示網際網路上的圖片
系列文
Jetpack Compose 從心開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言