這篇是這個專案不會用到的功能,但是也算是重要
這篇主要就是說該怎麼做,不會示範專案操作
如果需要詳細的教學,我覺得官方的寫得很不錯
https://developer.android.com/courses/android-basics-compose/unit-5?hl=zh-tw
這是簡易版教學
要使用Restful APi,要先引入retrofit的dependency
// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
// Retrofit with Scalar Converter
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")
要先建立一個和API結構相同的data class
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
data class TodoApiItem(
val userId: Int,
val id: Int,
val title: String,
val completed: Boolean
)
這部分跟database很像,定義一個interface(交互方式)
interface TodoApiService {
@GET("todos/{id}") // use GET method
suspend fun getTodoById(@Path("id") id: Int): TodoApiItem
}
建立一個object,避免retrofit反覆create吃效能
object RetrofitInstance {
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
val api: TodoApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(TodoApiService::class.java)
}
}
使用retrofit實例.api搭配定義好的方法就可以存取
搭配try catch來捕獲錯誤
try {
val result = RetrofitInstance.api.getTodoById(id)
} catch (e: Exception) {
Log.e("API", "Error: ${e.message}")
}
在使用網路連線必須先要求權限,AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
這邊的是極簡建立方式,還有一些方式,像是okHttp的連線方式,又或是用kotlin-serializer-json來解析傳回的json字串都是很常見的作法
這邊也是淺說一下,Android官方的教學也不錯
先引入Coil的庫
implementation("io.coil-kt:coil-compose:2.4.0")
這是從官方教學摳來的範例
AsyncImage(
model = ImageRequest.Builder(context = LocalContext.current).data(photoURL)
.crossfade(true).build(),
error = painterResource(R.drawable.ic_broken_image),
placeholder = painterResource(R.drawable.loading_img),
contentDescription = "description",
contentScale = ContentScale.Crop, // 置中裁減
modifier = Modifier.fillMaxWidth()
)