// 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")
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter