Android室 - 试图根据主ID查询单行
我想实现什么?
获取具有我需要的ID的单一数据。 的SQL等效
从最爱中选择 * link ='link'
。我写了一个名为getOnefav()的乐趣。我正在关注教程
到目前为止我设置了什么?
实体
@Entity(tableName = "favs")
data class Favorite(
@PrimaryKey @ColumnInfo(name = "link") val link : String,
@ColumnInfo(name = "keywords") val keywords : String
)
dao
@Dao
interface FavDAO {
@Query("SELECT * FROM favs")
fun getAllFavsLive(): Flow<List<Favorite>>
@Query("SELECT * FROM favs WHERE link = :link")
fun getOneFav(link: String): Favorite
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(link: Favorite)
}
存储库
class FavRepo (private val favDao: FavDAO) {
val allFavs: Flow<List<Favorite>> = favDao.getAllFavsLive()
@Suppress("RedundantSuspendModifier")
@WorkerThread
suspend fun insert(link: Favorite) {
favDao.insert(link)
}
fun getOneFav(link: String) = favDao.getOneFav(link)
@Suppress("RedundantSuspendModifier")
@WorkerThread
suspend fun delete(link: String) {
favDao.delete(link)
}
}
ViewModel
class FavViewModel (private val repository: FavRepo) : ViewModel() {
val allFavs: LiveData<List<Favorite>> = repository.allFavs.asLiveData()
fun insert(link: Favorite) = viewModelScope.launch {
repository.insert(link)
}
fun getOneFav(link: String) = repository.getOneFav(link)
}
class FavViewModelFactory(private val repository: FavRepo) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(FavViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return FavViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
我面临哪些问题?
我收到一个错误说
java.lang.runtimeException:无法启动活动componentInfo {[删除的软件包名称] .mainactivity}:java.lang.illang.illegalstateexception:无法在主线程上访问数据库,因为它可能会长时间锁定UI, 。
到目前为止,我尝试过什么?
我已经尝试过 -
- 在DAO的功能GetOneFav的前面添加悬挂,并且存储库
- 使该函数在ViewModelScope中运行。它给出了与上述相同的错误。另外,通过这种方式,该函数返回了作业,而不是“喜欢的”数据类对象。
fun getOneFav(link: String) = viewModelScope.launch {
repository.getOneFav(link)
}
- 在此处遵循此方法 - 如何实现房间livedata filter 尽管有效,这似乎是如此简单的事情。同样,尽管该代码正在使用mutableLivedata,但插入发生时我无法看到任何触发器。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该在不同的情况下运行查询:
You should run your queries in a different context: