gpt4 book ai didi

Android:能够返回 ArrayList 但不是 LiveData 数组列表

转载 作者:行者123 更新时间:2023-11-29 23:06:07 25 4
gpt4 key购买 nike

我无法从 Room 数据库中获取 LiveData ArrayList,但我能够检索标准 ArrayList,但无法弄清楚原因。

我在 Debug模式下运行了这段代码,ArrayList 返回了 4 的大小,这是它应该的。 LiveData ArrayList 在使用获取值时返回 null。我在执行程序内和执行程序外都运行了 LiveData 查询,它返回 null。

声明

public LiveData<List<CourseEntity>> courseEntities;
private List<CourseEntity> courseData = new ArrayList<>();

执行器之外的代码

public void loadData(final int termId) {

courseEntities = courseRepository.getCourseByTermId(termId);
courseData = courseEntities.getValue();

}

执行器内部代码

public void loadData(final int termId) {
executor.execute(new Runnable() {
@Override
public void run() {
courseEntities = courseRepository.getCourseByTermId(termId);
courseData = courseEntities.getValue();

}
});
}

仅使用 ArrayList 的代码

public void loadData(final int termId) {
executor.execute(new Runnable() {
@Override
public void run() {

courseData = courseRepository.getCourseByTerm(termId);
}
});
}

来自 Dao 的查询

@Query("SELECT * FROM course " +
"WHERE term_id = :termIdSelected ORDER BY course_start" )
LiveData<List<CourseEntity>> getCourseByTermId(int termIdSelected);

@Query("SELECT * FROM course WHERE term_id = :termIdSelected ORDER BY course_start")
List<CourseEntity> getCourseByTerm(int termIdSelected);

这会为 LiveData 生成一个空值,而不是像普通 ArrayList 生成的值 4。唯一的区别是结果的 LiveData 包装器。任何人都可以分享的智慧将​​不胜感激。

最佳答案

当你有一个 Room @Dao 时,返回一个 LiveData(或一个 RxJava 类型,如 ObservableSingle ),生成的实现将在后台线程上完成实际工作。因此,当 getCourseByTermId() 返回时,工作还没有开始,所以 LiveData 还没有结果。

响应式类型,如 LiveData,旨在被观察。因此,您的 Activity/fragment/任何东西都会observe() LiveData 并在交付时对结果使用react。

关于Android:能够返回 ArrayList 但不是 LiveData 数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56509413/

25 4 0