//main activity.kt
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.unit.dp
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import com.example.myapplication.ui.theme.User
import com.example.myapplication.ui.theme.UserDatabase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val database = UserDatabase.getInstance(this)
InsertRecord(database)
}
}
}
@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) {
userDao.insert(User(username = name, phone = phone))
}
Toast.makeText(context, "Record Inserted Successfully", Toast.LENGTH_LONG).show()
}) {
Text(text = "Insert Now")
}
}
}
@Preview(showBackground = true)
@Composable
fun PreviewInsertRecord() {
val mockDatabase = UserDatabase.getInstance(context = LocalContext.current) // Use a mock database for preview
InsertRecord(mockDatabase)
}
// user.kt(create data class file)
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true) val uid: Int? = null,
val username: String,
val phone: String
)
{
}
// userdao.kt(create interface)
package com.example.myapplication.ui.theme
import androidx.room.Dao
import androidx.room.Insert
@Dao
interface UserDAO {
@Insert
suspend fun insert(user: User)
}
// userdatabase.kt(create class file)
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@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: Context): UserDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_database"
).build()
INSTANCE = instance
instance
}
}
}
}
//plugins{
// kotlin("kapt")
//}
//dependendcies{
// val room_version="2.6.1"
// implementation("androidx.room:room-runtime:$room_version")
// kapt("androidx.room:room-compiler:$room_version") // for annotation processing
// implementation("androidx.room:room-ktx:$room_version")
//}
*********