如何从房间数据库中获取字符串 []?



不言自明。我有一个Room数据库,其中一个表有一列类型为String,我想获取该列中的所有数据并将其作为String[]返回。出于某种原因,该String[]始终为空。我做错了什么?

这是我的DAO的命令:

@Query("SELECT SubMenuTitle FROM SubMenus WHERE MenuID = :MenuID")
String[] getSubMenus(int MenuID);

当我在手机上使用 sqlite3 二进制文件运行查询时,输出符合预期。

这个答案已经晚了很多很多年了,但我通过更改代码来解决这个问题,如下所示:

@Query("SELECT SubMenuTitle FROM SubMenus WHERE MenuID = :MenuID")
LiveData<String[]> getSubMenus(int MenuID);

然后,在创建 ViewModel 对象后,按如下方式实现observe()方法:

vm.getSubMenus(MenuID).observe(this, new Observer<String[]>() {
@Override
public void onChanged(@Nullable String[] menus) {
populateTabs(menus);
}
});

我的理解是,由于数据库查询需要时间来运行,因此在运行getSubMenus()的那一刻,数据库实际上不会返回任何内容。我最初的错误理解是 Room 会等待数据库查询完成运行后再返回对象,但 5 年的研究证明情况并非如此。因此,需要LiveData<>包装器,以便在数据来自数据库时更新String[]。但是,我可能仍然错了,所以如果我错了,请有人纠正我。

相关内容

  • 没有找到相关文章

最新更新