Android 使用回调或暂停活动生命周期修改视图
我有一个应用程序需要加载其数据库。在加载数据库时,我会显示一条加载消息。加载完成后,我关闭加载消息并在数据库中显示项目列表,但我遇到了Android 使用回调或暂停活动生命周期修改视图,android,android-activity,android-recyclerview,callback,wait,Android,Android Activity,Android Recyclerview,Callback,Wait,我有一个应用程序需要加载其数据库。在加载数据库时,我会显示一条加载消息。加载完成后,我关闭加载消息并在数据库中显示项目列表,但我遇到了android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 基本上是因为是回调线程在触摸UI。loadList()基本上遍历数据库中的所有结果,并将其添加到视图/适配器中 public void onResume() { super.onResum
android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。
基本上是因为是回调线程在触摸UI。loadList()基本上遍历数据库中的所有结果,并将其添加到视图/适配器中
public void onResume() {
super.onResume();
if (!DbProvider.isDbAvailable()) {
mNoResults.setText("Loading DB...");
mNoResults.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.GONE);
DbProvider.setOnDbAvailableListener(() -> {
runOnUiThread(new Runnable() {
@Override
public void run() {
mNoResults.setText(R.string.no_results);
}
});
loadList(true);
});
} else {
loadList(true);
}
这是我的侦听器/回调
public interface OnDbAvailableListener {
void onDbAvailable();
}
public static boolean isDbAvailable() {
return mIsDbAvailable;
}
public static void setOnDbAvailableListener(OnDbAvailableListener listener) {
synchronized (mIsDbAvailable) {
if (mIsDbAvailable) {
listener.onDbAvailable();
} else {
mOnDbAvailableListener = listener;
}
}
}
public static void setResultProvider(@NonNull IResultProvider ngStorage) {
synchronized (mIsDbAvailable) {
sResultProvider = ngStorage;
mIsDbAvailable = true;
if (mOnDbAvailableListener != null) {
mOnDbAvailableListener.onDbAvailable();
}
}
}
loadList也应该运行NuithRead,因为它在回调范围内