【发布时间】:2018-07-06 05:43:04
【问题描述】:
我正在修补SingleLiveEvent。是否可以将其与 Room 数据库一起使用?我尝试使用它并得到一个构建错误说Not sure how to convert a Cursor to this method's return type。这里有什么解决方法吗?我有一个我想使用它的边缘案例!
【问题讨论】:
标签: android android-room android-livedata
我正在修补SingleLiveEvent。是否可以将其与 Room 数据库一起使用?我尝试使用它并得到一个构建错误说Not sure how to convert a Cursor to this method's return type。这里有什么解决方法吗?我有一个我想使用它的边缘案例!
【问题讨论】:
标签: android android-room android-livedata
SingleLiveEvent 是 MutableLiveData 是 LiveData。您可以使用在工作线程中调用的选择查询从 Room 返回List<LiveData<YourData>>。无需在 Room 中使用光标。获取List<LiveData<YourData>> 并在观察方法上将List<YourData> 发送到所需的类或RecyclerView。您需要光标的边缘情况是什么?
注意:强烈建议不要使用 Cursor API,因为 它不保证行是否存在或行的值是什么 包含。仅当您已有代码时才使用此功能 需要一个游标,并且您无法轻松重构。
但是,你可以得到它
@Dao
public interface MyDao {
@Query("SELECT * FROM user WHERE age > :minAge LIMIT 5")
public Cursor loadRawUsersOlderThan(int minAge);
}
【讨论】:
Dao 中使用SingleLiveEvent 作为返回类型时,会导致我提到的错误。
LiveData 部分工作正常。但是观察LiveData 会导致代码在每次片段中的数据发生变化时执行。我只希望它被触发一次。我现在使用的一种解决方法是在使用 Executor 从 Room 加载值后将值发布到 SingleLiveEvent(不使用 LiveData 在 Dao 内包装)