我正在对Firebase实时数据库中的数据执行多次过滤。例如,我首先过滤小于20岁的人,如果结果计数小于50,则需要重新访问数据库以再次过滤小于30岁的人,依此类推……因此,我需要多次使用addChildEventListener
。
被选中的人员列表将显示在RecyclerView中。
我这样做是
adapter = new Adapter(this, getListFromFirebase());
view= findViewById(R.id.my_view);
view.setLayoutManager(manager);
view.setAdapter(adapter);
getListFromFirebase()
是使用addChildEventListener
从Firebase实时数据库获取数据的函数。
但是,由于Firebase Realtime数据库是异步的,因此在初始化RecyclerView时,它始终会向RecyclerView返回一个空列表。有什么方法可以确保我在进入RecyclerView之前可以从Firebase Realtime数据库成功获取想要的列表?
答案 0 :(得分:0)
由于firebase异步任务,您的方法getListFromFirebase()将始终返回null。而是在您的notifyAdapter处创建一个新方法,您可以从onChildAdded方法中调用它。
尝试一下
声明一个变量:
ArrayList<YourModel> list = new ArrayList<>();
即使它为空也将其传递给适配器:
adapter = new Adapter(this, list);
view= findViewById(R.id.my_view);
view.setLayoutManager(manager);
view.setAdapter(adapter);
getListFromFirebase(); // Dont return anything from this method. declare it void
void getListFromFirebase(){
//firebaselistener task
onChildAdded(){
YourModel yourModel = dataSnapshot.getValue();
mAdapter.addNewData(yourModel); //create a new method to update recyclerview Adapter
}
}
适配器:
void addNewData(YourModel newData){
list.add(newData); //assign the list value to adapter list
notifyAdapterChange();
}