【发布时间】:2020-11-15 22:37:18
【问题描述】:
我正在使用 dataBaseRoom 进行练习,我为他们创建了一个按钮,可以让我读取数据库,我想输入用户的名称,当按下按钮(读取数据库)时会反映我,他的名字,最后texview中的姓名和年龄,问题是我不知道如何在textView中显示数据。
我想要执行操作的活动
//实体
@Entity(tableName = "user_table")
data class User(
@PrimaryKey(autoGenerate = true)@ColumnInfo(name = "id") val id: Int,
val firstName: String,
val lastName: String,
val age: Int
)
//道
@Dao
interface UserDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun addUser(user: User)
@Query("SELECT * FROM user_table ORDER BY id ASC")
fun readAllData(): LiveData<User>
}
//数据库
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@Volatile
private var INSTANCE: UserDatabase? = null
fun getDatabase(context: Context): UserDatabase{
val tempInstance = INSTANCE
if(tempInstance != null){
return tempInstance
}
synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_database"
).build()
INSTANCE = instance
return instance
}
}
}
}
//存储库
class UserRepository(private val userDao: UserDao) {
val readAllData: LiveData<User> = userDao.readAllData()
suspend fun addUser(user: User){
userDao.addUser(user)
}
}
//视图模型
class UserViewModel(application: Application) : AndroidViewModel(application) {
val readAllData: LiveData<User>
private val repository: UserRepository
init {
val userDao = UserDatabase.getDatabase(application).userDao()
repository = UserRepository(userDao)
readAllData = repository.readAllData
}
fun addUser(user: User) {
viewModelScope.launch(Dispatchers.IO) {
repository.addUser(user)
}
}
}
我想在这个类中添加我的 texview
mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
mUserViewModel.readAllData.observe(viewLifecycleOwner, Observer {
textView1.text = it.firstName
textView2.text = it.lastName
textView3.text = it.age.toString()
})
【问题讨论】:
标签: sql sqlite android-room android-livedata android-viewmodel