API連携の概要
Retrofitとは?
Retrofitは、AndroidアプリでHTTP通信を簡単に行うためのライブラリです。APIからデータを取得し、アプリに反映する際に広く利用されます。シンプルな記述で、非同期処理やJSONのパースを簡単に扱えるのが特徴です。
Jetpack Composeとの連携
Jetpack Composeは、Androidの最新UIフレームワークであり、従来のXMLレイアウトを使用せずに直感的なUI設計が可能です。Retrofitと組み合わせることで、取得したデータをComposeのComposable関数内で簡単に表示できます。
本記事では、Retrofitを使ったAPI通信の基本と、Jetpack Composeでデータを表示する方法を解説します。
Retrofitのセットアップ
依存関係の追加
Retrofitを使用するには、build.gradle
(Module: app)に以下の依存関係を追加します。
dependencies {
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1"
implementation "androidx.compose.runtime:runtime-livedata:1.3.0"
}
APIインターフェースの作成
APIリクエストを行うために、Retrofitのインターフェースを定義します。
import retrofit2.http.GET
interface ApiService {
@GET("posts")
suspend fun getPosts(): List<Post>
}
データモデルの定義
APIのレスポンスを受け取るためのデータクラスを作成します。
data class Post(
val id: Int,
val title: String,
val body: String
)
Retrofitインスタンスの作成
Retrofitのインスタンスを作成し、APIの実装を提供します。
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitInstance {
private const val BASE_URL = "https://jsonplaceholder.typicode.com/"
val api: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
ViewModelでのデータ管理
ViewModelの作成
ViewModelを使用して、非同期でAPIデータを取得し、UIと連携します。
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
class PostViewModel : ViewModel() {
private val _posts = MutableLiveData<List<Post>>()
val posts: LiveData<List<Post>> = _posts
init {
fetchPosts()
}
private fun fetchPosts() {
viewModelScope.launch {
try {
_posts.value = RetrofitInstance.api.getPosts()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
Jetpack Composeでのデータ表示
ViewModelの取得
ComposeでViewModelを取得し、データを表示する準備を行います。
@Composable
fun PostScreen(viewModel: PostViewModel = viewModel()) {
val posts by viewModel.posts.observeAsState(emptyList())
LazyColumn {
items(posts) { post ->
PostItem(post)
}
}
}
個別のアイテム表示
各投稿のデータを表示するコンポーネントを作成します。
@Composable
fun PostItem(post: Post) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
elevation = 4.dp
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(text = post.title, fontSize = 20.sp, fontWeight = FontWeight.Bold)
Spacer(modifier = Modifier.height(4.dp))
Text(text = post.body, fontSize = 16.sp)
}
}
}
RetrofitとComposeを組み合わせるメリット
シンプルなコードで実装可能
Retrofitを使うことで、ネットワーク通信の実装が簡潔になり、Composeを利用すると少ないコード量でUIを作成できます。
非同期処理の容易な管理
ViewModelとviewModelScope.launch
を利用することで、API通信を非同期で行いながらUIを適切に更新できます。
直感的なUI設計
Composeの宣言型UIにより、データの取得と画面描画が簡単に連携できます。
まとめ
- Retrofitを利用してAPIからデータを取得。
- ViewModelを活用してデータを管理し、Composeと連携。
LazyColumn
を使ってデータをリスト表示。- 非同期処理を
viewModelScope.launch
で管理し、エラー処理も考慮。
この方法を活用すれば、AndroidアプリでのAPI連携がスムーズに行えます。RetrofitとJetpack Composeを組み合わせ、より効率的なアプリ開発に挑戦してみましょう!