Sqlite 错误:只有创建视图层次结构的原始线程才能接触其视图



我正在尝试了解以下错误的原因以及如何修复它。

只有创建视图层次结构的原始线程才能触摸其 视图。

这是我的代码片段。

public void refreshMyRecyclerView() {
    new Thread(new Runnable(){
        @Override
        public void run(){
            mValueList = mMyDatabase.fillValueList(); //pulls data from sqlite db
            mRecyclerAdapter = new MyRecyclerAdapter(getActivity(), mValueList);
            mRecyclerView.setAdapter(mRecyclerAdapter); //error on this line
        }
    }).start();
}

我正在尝试通过执行 UI 线程的 SQLite 读取来遵循良好做法。但是,我遇到了像上面这样的奇怪错误,即使在阅读了涉及相同错误描述的类似问题后,我也不知道是什么导致了它。

应仅从 UI 线程访问 UI 组件,例如视图。正如您发现的那样,如果您尝试从后台线程访问它们,则会出现错误。

您可以从后台线程上的数据库中读取值,但应在 UI 线程上填充和设置适配器。如果您在Activity可以使用方法runOnUiThread(...) .否则,如果在片段中getActivity().runOnUiThread(...)mRecyclerView.post(...)也可以工作。所有方法都需要Runnable

public void refreshMyRecyclerView() {
    new Thread(new Runnable(){
        @Override
        public void run(){
            mValueList = mMyDatabase.fillValueList(); //pulls data from sqlite db
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mRecyclerAdapter = new MyRecyclerAdapter(getActivity(), mValueList);
                    mRecyclerView.setAdapter(mRecyclerAdapter);
                }
            });
        }
    }).start();
}

最新更新