android - Room Database:如何一次性获取数据?
问题描述
这是我的数据库
@Database(entities = [UserModel::class], version = 1,exportSchema = false)
abstract class UserRoomDatabase : RoomDatabase() {
abstract fun getUserDao() : UserDAO
companion object{
@Volatile
private var instance : UserRoomDatabase?= null
fun getInstance(context : Context): UserRoomDatabase{
if(instance==null)
instance = Room
.databaseBuilder(context,UserRoomDatabase::class.java,"UserRoomDatabase")
.allowMainThreadQueries()
.build()
return instance!!
}
}
}
DAO接口
@Dao
interface UserDAO {
@Query("select * from user_table where _id =:id")
fun readUserByIdSyncDAO(id : String) : UserModel
}
存储库
class UserRepository(context : Context) {
private val userDAO : UserDAO
init {
val userDatabase: UserRoomDatabase = UserRoomDatabase.getInstance(context)
userDAO = userDatabase.getUserDao()
}
fun readUserByIdSyncDAO(id : String) : UserModel = userDAO.readUserByIdSyncDAO(id)
}
视图模型
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
fun readUserByIdSyncDAO(id : String) : UserModel = userRepository.readUserByIdSyncDAO(id)
}
这就是我使用的方式
val userModel = viewModel.readUserByIdSyncDAO(userId)
Log.e(TAG,userModel.toString())
但我得到了错误
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList com.animals.snowy.models.UserModel.getFriends()' on a null object reference
为什么会出现此错误,我该如何解决?
我想知道我是否在数据库中使用allowMainThreadQueries(),对应用程序来说是好还是坏?
解决方案
推荐阅读
- reinforcement-learning - 具有不同训练算法的 RLIB 多个代理
- android - Android kotlin - 黑色透明背景的活动和白色背景的 SearchView
- reactjs - TypeError: this.props is not a function (react router / switch)
- express - 在 foreach 循环中更新数据库
- powershell - powershell 命令获取网络适配器连接状态
- java - 用户删除帐户时保存用户详细信息和资源的最佳做法是什么?
- ios - CollectionViewCell 中 CollectionView 的数据源始终为 nil
- python - glRotatef 之后 glTranslatef 搞砸了
- rust - 以块为单位对向量进行二分搜索
- wordpress - 完成 Woo-commerce 结帐后禁用自动登录