使用占位符的动态值房间查询

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",这是我的错误。