【问题标题】:Firebase onChildAdded not called when there is no data没有数据时不调用 Firebase onChildAdded
【发布时间】:2016-11-17 06:15:05
【问题描述】:

我想检查里面是否有孩子。当我有数据时,它会进入OnChildAdded,否则当没有没有被调用的孩子时?我想知道有没有数据?如何检查?

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) {

        }




    });

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    顾名思义,onChildAdded() 只有在将子元素添加到集合时才会被调用。如果没有孩子,就不会被调用。

    要检测没有孩子的情况,可以附加一个值事件监听器。

    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();
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多