使用占位符的动态值房间查询
Room query with dynamic values using placeholders
我正在实现一个 Room 数据库(因为我想远离加载程序)并且我有一个基于 IN
运算符选择对象的查询:
@Query(SELECT * FROM table WHERE icon IN(:icons))
LiveData<List<Result>> getResults(String[] icons);
问题是 :icons
数组是在运行时动态生成的,首先我为它生成占位符,然后用值替换它们,如下所示:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] iconsArray = generateIconArray();
mViewModel = ViewModelProviders.of(this, new MyViewModelFactory(getActivity().getApplication(), iconsArray)).get(MyViewModel.class);
mViewModel.getResults().observe(this, new Observer<List<Result>>() {
@Override
public void onChanged(@Nullable List<Result> results) {
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
mRecyclerView.setLayoutManager(layoutManager);
GridAdapter adapter = new GridAdapter(getActivity(), results);
mRecyclerView.setAdapter(adapter);
}
});
}
问题是我收到了一个空的 RecyclerView,但是当我传递一个只有一个图标的数组时,查询工作正常。
是否无法在 Room 中实现相同的功能,因为它会在编译时检查查询?
如果不是,我应该在我的存储库构造函数中使用 db.query(...)
而不是那样吗?
我知道有人问过这种问题,但它也说他们正在处理它,但我找不到任何迹象。
编辑:
万一有人偶然发现这个问题,我在实现这个功能时犯了一个小错误,onActivityCreated
中提供的代码确实有效。还值得一提的是,它适用于 String[]
和列表,但不适用于单个字符串:"ab,cd,ef"
.
我在实现此功能时犯了一个小错误,onActivityCreated
中提供的代码确实有效。还值得一提的是,它适用于 String[]
和 List
,但不适用于单个 String
:"ab,cd,ef",这是我的错误。
我正在实现一个 Room 数据库(因为我想远离加载程序)并且我有一个基于 IN
运算符选择对象的查询:
@Query(SELECT * FROM table WHERE icon IN(:icons))
LiveData<List<Result>> getResults(String[] icons);
问题是 :icons
数组是在运行时动态生成的,首先我为它生成占位符,然后用值替换它们,如下所示:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] iconsArray = generateIconArray();
mViewModel = ViewModelProviders.of(this, new MyViewModelFactory(getActivity().getApplication(), iconsArray)).get(MyViewModel.class);
mViewModel.getResults().observe(this, new Observer<List<Result>>() {
@Override
public void onChanged(@Nullable List<Result> results) {
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
mRecyclerView.setLayoutManager(layoutManager);
GridAdapter adapter = new GridAdapter(getActivity(), results);
mRecyclerView.setAdapter(adapter);
}
});
}
问题是我收到了一个空的 RecyclerView,但是当我传递一个只有一个图标的数组时,查询工作正常。
是否无法在 Room 中实现相同的功能,因为它会在编译时检查查询?
如果不是,我应该在我的存储库构造函数中使用 db.query(...)
而不是那样吗?
我知道有人问过这种问题
编辑:
万一有人偶然发现这个问题,我在实现这个功能时犯了一个小错误,onActivityCreated
中提供的代码确实有效。还值得一提的是,它适用于 String[]
和列表,但不适用于单个字符串:"ab,cd,ef"
.
我在实现此功能时犯了一个小错误,onActivityCreated
中提供的代码确实有效。还值得一提的是,它适用于 String[]
和 List
,但不适用于单个 String
:"ab,cd,ef",这是我的错误。