为什么列表数组在onCreate方法中失去其值?

时间:2019-10-26 13:20:56

标签: java android

可能是我错过了某些事情,但我正在解决一个非常基本的问题。我想做的是通过在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声明为类变量。那么为什么它失去了价值。

谢谢。纠正我:)

1 个答案:

答案 0 :(得分:2)

listLiveData.observe是一个异步函数,因此if (list_entry_model_list.size()==0)将在不等待listLiveData.observe结果的情况下执行,即它将在将任何内容分配给list_entry_model_list之前执行。