package com.example.roomsetup
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.lifecycle.lifecycleScope
import androidx.room.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@Entity
data class User(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val name: String,
val age: Int
)
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Query("SELECT * FROM User")
suspend fun getAll(): List<User>
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
class MainActivity : ComponentActivity() {
private lateinit var db: AppDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "user-database"
).build()
setContent {
var users by remember { mutableStateOf<List<User>>(emptyList()) }
LaunchedEffect(Unit) {
users = withContext(Dispatchers.IO) { db.userDao().getAll() }
}
Scaffold(
floatingActionButton = {
FloatingActionButton(onClick = {
lifecycleScope.launch {
withContext(Dispatchers.IO) {
db.userDao().insert(User(name = "John Doe", age = 30))
}
users = withContext(Dispatchers.IO) { db.userDao().getAll() }
}
}) {
Text("+")
}
}
) { paddingValues ->
Column(modifier = androidx.compose.ui.Modifier.padding(paddingValues)) {
Text("User List", style = MaterialTheme.typography.headlineMedium, modifier = androidx.compose.ui.Modifier.padding(16.dp))
LazyColumn {
items(users) { user ->
Text(text = "${user.name}, Age: ${user.age}", modifier = androidx.compose.ui.Modifier.padding(8.dp))
}
}
}
}
}
}
}We defined a User data class as an Entity with an auto-generated primary key. The UserDao interface has methods to insert a user and get all users. The AppDatabase class extends RoomDatabase and provides access to the DAO.
In MainActivity, we build the database instance. We use Compose to display the list of users in a LazyColumn. A floating action button inserts a new user with fixed data when clicked, then reloads the list from the database.
This setup shows how to connect Room database with UI and perform basic insert and query operations.