// MainActivity.kt package com.example.dbtest import android.os.Bundle import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.* import androidx.compose.material3.Button import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.room.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext // Room Database-related code (User entity, DAO, and Database class) // User data class representing the database table @Entity(tableName = "users") data class User( @PrimaryKey(autoGenerate = true) val uid: Int = 0, val username: String, val phone: String ) // DAO interface for database operations @Dao interface UserDAO { @Insert suspend fun insert(user: User) } // Room Database class @Database(entities = [User::class], version = 1) abstract class UserDatabase : RoomDatabase() { abstract fun userDao(): UserDAO companion object { @Volatile private var INSTANCE: UserDatabase? = null fun getInstance(context: android.content.Context): UserDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext, UserDatabase::class.java, "user_database" ).build() INSTANCE = instance instance } } } } // Main Activity to set up the content and provide the database instance class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val database = UserDatabase.getInstance(this) setContent { InsertRecord(database) } } } // Composable function for inserting user data @Composable fun InsertRecord(database: UserDatabase) { val context = LocalContext.current val userDao = database.userDao() var name by remember { mutableStateOf("") } var phone by remember { mutableStateOf("") } val scope = rememberCoroutineScope() Column( modifier = Modifier .fillMaxSize() .padding(16.dp) ) { Text(text = "Enter your details here") Spacer(modifier = Modifier.height(25.dp)) OutlinedTextField( value = name, onValueChange = { name = it }, label = { Text(text = "Enter your name") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(25.dp)) OutlinedTextField( value = phone, onValueChange = { phone = it }, label = { Text(text = "Enter your phone number") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(25.dp)) Button(onClick = { scope.launch(Dispatchers.IO) { // Insert user data in the database userDao.insert(User(username = name, phone = phone)) // Display Toast on the main thread withContext(Dispatchers.Main) { Toast.makeText(context, "Record Inserted Successfully", Toast.LENGTH_LONG).show() } } }) { Text(text = "Insert Now") } } } //Plugins //kotlin("kapt") //Dependencies //val room_version = "2.6.1" // implementation("androidx.room:room-runtime:$room_version") // kapt("androidx.room:room-compiler:$room_version") // implementation("androidx.room:room-ktx:$room_version")