2016-11-16 3 views
0

Ich möchte überprüfen, ob ein Kind drin ist oder nicht.Wenn ich Daten habe, dann geht es ins Innere OnChildAdded sonst wenn es kein Kind gibt, das nicht angerufen wird? Ich möchte wissen, ob es irgendwelche Daten gibt oder nicht? Wie überprüfe ich das?Firebase onChildAdded nicht angerufen, wenn keine Daten vorhanden sind

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

     } 




    }); 

Antwort

0

Wie der Name schon sagt onChildAdded() wird nur dann, wenn ein Kind hinzugefügt wird zur Sammlung aufgerufen werden. Wenn es keine Kinder gibt, wird es nicht angerufen.

Um die Situation zu erkennen, in der keine untergeordneten Objekte vorhanden sind, können Sie einen Wert-Ereignis-Listener anhängen.

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