Firebase onChildAdded not called when there is no data

别等时光非礼了梦想. 提交于 2019-12-25 04:13:55

问题


I want to check if there is child inside or not.When I have data then it goes inside OnChildAdded else when there is no child that is not being called? I want to know if there is any data or not? How do I check this?

ref.orderByKey().startAt(todayDate).endAt(tomorrowDate).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            System.out.println("does the child exist? " + dataSnapshot.child("matches").exists());
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                AvailableRidesFirebaseObject rides = postSnapshot.getValue(AvailableRidesFirebaseObject.class);

                AvailableRidesFirebaseObject availableRidesFirebaseObject = new AvailableRidesFirebaseObject();
                availableRidesFirebaseObject.setAdded_on(rides.getAdded_on());
                availableRidesFirebaseObject.setCode(rides.getCode());
                availableRidesFirebaseObject.setTime(rides.getTime());
                availableRidesFirebaseObject.setDate_of_ride(rides.getDate_of_ride());
                availableRidesFirebaseObject.setDay(rides.getDay());
                availableRidesFirebaseObject.setDropoff_location(rides.getDropoff_location());
                availableRidesFirebaseObject.setDropoff_coordinate(rides.getDropoff_coordinate());
                availableRidesFirebaseObject.setFullname(rides.getFullname());
                availableRidesFirebaseObject.setOffered_by(rides.getOffered_by());
                availableRidesFirebaseObject.setPickup_location(rides.getPickup_location());
                availableRidesFirebaseObject.setPickup_coordinate(rides.getPickup_coordinate());
                availableRidesFirebaseObject.setSeats(rides.getSeats());
                availableRidesFirebaseObject.setShare(rides.getShare());
                availableRidesFirebaseObject.setVechile_type(rides.getVechile_type());
                availableRidesList.add(availableRidesFirebaseObject);


                filteredList.add(rides);
                Logger.e("list" ,filteredList.toString());
            }

            try{
                adapter = new RecyclerViewAdapter(getActivity(), availableRidesList);
                availableRideListView.setHasFixedSize(true);
                RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
                availableRideListView.setLayoutManager(mLayoutManager);
                availableRideListView.setAdapter(adapter);
                loading.setVisibility(View.GONE);

            }catch(NullPointerException ne){
                ne.printStackTrace();
                /*if(availableRidesList.size()==0){
                    loading.setVisibility(View.GONE);
                }*/
            }

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }




    });

回答1:


As its name implies onChildAdded() will only be called if a child is added to the collection. If there are no children, it will not be called.

To detect the situation where there are no children, you can attach a value-event listener.

Query query = ref.orderByKey()
                 .startAt(todayDate)
                 .endAt(tomorrowDate)
                 .limitToFirst(1);
query.addValueEventListener(new ValueEventListener() {
  public void onDataChange(DataSnapshot snapshot) {
    if (snapshot.getChildrenCount() == 0) {
      System.out.println("No children");
    };
  }
  public void onCancelled(DatabaseError error) {
    throw error.toException();
  }
});


来源:https://stackoverflow.com/questions/40631148/firebase-onchildadded-not-called-when-there-is-no-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!