可能是我错过了某些事情,但我正在解决一个非常基本的问题。我想做的是通过在retrievedata
方法上调用的方法onCreate
访问数据库中的某些数据,并将返回的列表数据分配给其中的一个listarray并基于该列表数据的大小我做一些手术。
问题在于,无论从数据库中返回的数据如何,arraylist的大小都将返回为零。这是我在onCreate()
方法中尝试做的事情
retrievedata();
if (list_entry_model_list.size()==0) //problem here returns true always
notesDatabase.listDaoClass().insert_lists(new List_Entry_Model(""));
retrievedata()方法如下所示
public void retrievedata() {
listLiveData = notesDatabase.listDaoClass().load_all_lists();
listLiveData.observe(this, new Observer<List<List_Entry_Model>>() {
@Override
public void onChanged(List<List_Entry_Model> list_entry_models) {
list_entry_model_list = list_entry_models; //here I assigned data to the Listarray that I declared as class variable.
listadapter.submitList(list_entry_model_list);
listadapter.setData(list_entry_model_list);
}
});
Log.d("yummyinside", String.valueOf(list_entry_model_list.size()));
}
如果我在retrievedata()
方法内检索listarray的大小,则显示正确的大小。将listarray声明为类变量。那么为什么它失去了价值。
谢谢。纠正我:)
答案 0 :(得分:2)
listLiveData.observe是一个异步函数,因此if (list_entry_model_list.size()==0)
将在不等待listLiveData.observe
结果的情况下执行,即它将在将任何内容分配给list_entry_model_list之前执行。