I have a firebase database from which I save and retrieve data from, to and from. I know how datasnapshot works inside an addValueEventListener. The problem is that this is only called or triggered when the firebase database detects change in its data. I only want to access data and read it to be able to store it in an arraylist or the same thing.
I have a code like this:
public void foo(){
    DatabaseReference x= FirebaseDatabase.getInstance().getReference().child("x");
    reservations.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String userID = client.getId();
            for(DataSnapshot snap : dataSnapshot.getChildren()){
                if(snap.child("someId").equals(someId)) number++;
                if(snap.child("userID").getValue().equals(client.getId())){
                    isAlreadyReserved = true;   // if user has already reserved the item
                    alreadyReserved();
                    break;
                }
                Log.e("isAlreadyReserved: ", isAlreadyReserved+"");
                numberOfReservations++;
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    if(isAlreadyReserved) {
        alreadyReserved();
    }
    else if(number == numberOfCopies){
        // material is no longer available
        OtherActivity.showMaterialUnavailable();
    }
    else{
        Reservation reservation = new Reservation();
        reservation.setBookId(this.bookId);
        reservation.setResID((numberOfReservations+1)+"");
        reservation.setUserID(client.getId());
        String key = reservations.push().getKey();
        reservations.child(key).setValue(reservation);
        Log.e("Reservations: ", "reserve successful");
        AlertDialog.Builder builder = new AlertDialog.Builder(this.context);
        builder.setTitle(R.string.reservationSuccess_title)
                .setMessage(R.string.reservationSuccess_body);
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}
You can see that inside onDataChange I only count materials and set some flags, which I can supposedly do outside the ValueEventListener.
But I notice that this is faulty because onDataChange is called only when writing to the Firebase database occurs. Which should not be the case.
What can I do to loop through the values inside the DatabaseReference x without calling onDataChange, or without using DataSnapshot? 
 
     
     
    