TODO

Todo エンティティを定義します。このエンティティはデータベーステーブルにマップされる

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
data class Todo(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val title: String,
    val description: String,
    val isDone: Boolean
)

DAO インターフェースを作成。このインターフェースは、データベースアクセス用のメソッドを定義

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update

@Dao
interface TodoDao {
    @Query("SELECT * FROM todo")
    fun getAllTodos(): List<Todo>

    @Query("SELECT * FROM todo WHERE id = :id")
    fun getTodoById(id: Int): Todo

    @Insert
    fun insertAll(vararg todos: Todo)

    @Update
    fun updateTodo(todo: Todo)

    @Delete
    fun delete(todo: Todo)
}

データベースインスタンス

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(entities = [Todo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun todoDao(): TodoDao
}

コンポーネントを Jetpack Compose UI と統合

import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.room.Room
import android.app.Application
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.Modifier

@Composable
fun TodoApp(todoViewModel: TodoViewModel = viewModel()) {
    val todos by todoViewModel.todos.collectAsState(initial = emptyList())

    Scaffold(
        topBar = { TopAppBar(title = { Text("TODO List") }) },
        content = {
            Column {
                for (todo in todos) {
                    TodoItem(todo = todo)
                }
            }
        }
    )
}

@Composable
fun TodoItem(todo: Todo) {
    Row(modifier = Modifier.fillMaxWidth()) {
        Checkbox(
            checked = todo.isDone,
            onCheckedChange = { /* Handle check change */ }
        )
        Text(text = todo.title)
    }
}

// ViewModel は、UI とデータベース層をつなぐ役割
class TodoViewModel(application: Application) : AndroidViewModel(application) {
    private val db = Room.databaseBuilder(
        application,
        AppDatabase::class.java, "database-name"
    ).build()

    // データベースからTODOリストを取得する
    val todos = db.todoDao().getAllTodos().asLiveData()
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です