private Firebase_Database DbOnline;
ArrayList<ClassModel> clsList;
clsList = DbOnline.getClassesList();//return arraylist containing objects ...
//Implementation of getClassesList() in Firebase_Database CLASS..
public ArrayList<ClassModel> getClassesList(){//upto to this every thing execute but from here the //execution jumps to if(condition) line below...and I get null arraylist in return
FbDb.child("Classes").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren())
{
ClassModel classModel = ds.getValue(ClassModel.class);
classModels.add(classModel);
Log.i("Tag", "Msg");
}
Log.i("Tag", String.valueOf(classModels.size()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if (classModels==null){
Log.i("TAG","Null NO DATA IN DATABASE");
}
return classModels;
}
最佳答案
Firebase 的操作是异步的。所以你必须等待才能获取数据。您可以使用 LiveData 并观察它以获取更新的内容。检查以下内容:
private MutableLiveData<ArrayList<ClassModel>> mutableClassModels = new MutableLiveData<>();
private ArrayList<ClassModel> classModels = new ArrayList<>();
public MutableLiveData<ArrayList<ClassModel>> getClassesList(){//upto to this every thing execute but from here the //execution jumps to if(condition) line below...and I get null arraylist in return
FbDb.child("Classes").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren())
{
ClassModel classModel = ds.getValue(ClassModel.class);
classModels.add(classModel);
Log.i("Tag", "Msg");
}
mutableClassModels.postValue(classModels);
Log.i("Tag", String.valueOf(classModels.size()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return mutableClassModels;
}
然后像下面这样观察:
DbOnline.getClassesList().observe(this, new Observer<ArrayList<ClassModel>>() {
@Override
public void onChanged(ArrayList<ClassModel> classModels) {
// Do your operation here
}
});
更新:
如下更新您的适配器:
//Initialize it, as it causing NullPointerException
ArrayList<ClassModel> clsList = new ArrayList<>();
public Adapter(Context context, String name) {
...
DbOnline=new Firebase_Database();
if (fragName.equals(listForClasses)) {
DbOnline.getClassesList().observe((LifecycleOwner) context, new Observer<ArrayList<ClassModel>>() {
@Override
public void onChanged(ArrayList<ClassModel> classModels) {
clsList =classModels;
clsList.size();
//Notify to refresh the items
notifyDataSetChanged();
}
});
} else {
sList = null;//DbOffline.getStudentsList("");
}
}
关于java - 我想从 firebase 数据库获取数据对象,但 db Reference.addValueEventListener 将不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59491912/