我正在尝试了解以下错误的原因以及如何修复它。
只有创建视图层次结构的原始线程才能触摸其 视图。
这是我的代码片段。
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();
}