在Android Room中,可以通过使用@Insert
注解的方法来插入数据。当使用@Insert
注解的方法成功执行后,可以获取到自动生成的新插入行的id。
以下是一个使用MVVM模式的示例代码,演示如何获取自动生成的新插入行的id:
1. 创建一个实体类
@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val name: String,
val age: Int
)
2. 创建一个DAO接口
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User): Long
@Query("SELECT * FROM users")
suspend fun getAllUsers(): List
}
3. 创建一个Repository类
class UserRepository(private val userDao: UserDao) {
suspend fun insertUser(user: User): Long {
return userDao.insert(user)
}
suspend fun getAllUsers(): List {
return userDao.getAllUsers()
}
}
4. 创建一个ViewModel类
class UserViewModel(private val userRepository: UserRepository): ViewModel() {
private val _users = MutableLiveData>()
val users: LiveData> = _users
fun insertUser(user: User) {
viewModelScope.launch {
val insertedId = userRepository.insertUser(user)
user.id = insertedId // 更新User对象的id
}
}
fun getAllUsers() {
viewModelScope.launch {
val allUsers = userRepository.getAllUsers()
_users.value = allUsers
}
}
}
5. 在Activity或Fragment中使用ViewModel
class MainActivity : AppCompatActivity() {
private lateinit var userViewModel: UserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val userDao = AppDatabase.getDatabase(this).userDao()
val userRepository = UserRepository(userDao)
userViewModel = ViewModelProvider(this, UserViewModelFactory(userRepository)).get(UserViewModel::class.java)
// 插入新用户
val user = User(name = "John", age = 25)
userViewModel.insertUser(user)
// 获取所有用户
userViewModel.getAllUsers()
userViewModel.users.observe(this, Observer { users ->
// 处理获取到的用户列表
})
}
}
上述代码中,首先通过UserDao
的insert
方法插入一个新的用户,并将返回的insertedId赋值给user.id
。然后,通过UserDao
的getAllUsers
方法获取所有用户,再通过UserViewModel
将获取到的用户列表传递给Activity或Fragment进行处理。
这样就可以使用MVVM模式结合Android Room获取自动生成的新插入行的id了。