如何从 Room 数据库中获取 String[]?

问题描述 投票:0回答:1

非常不言自明。我有一个 Room 数据库,其中一个表有一个

String
类型的列,我想获取该列中的所有数据并将其作为
String[]
返回。由于某种原因,
String[]
总是空的。我做错了什么?

这是来自我的 DAO 的命令:

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

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

java android sqlite dao
1个回答
0
投票

这个答案晚了很多很多年,但我通过将代码更改为类似于以下内容来解决这个问题:

@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[]
可以在数据从数据库传入时更新。但是,我可能仍然是错的,所以如果我错了,请有人纠正我。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.