0

I am building an app which have qr codes and its scanner i want to keep to record of how many times each qr code is being scanned but Firebase increases values itself...i want to increment value by one when qr code is scanned.

 valueEventListener1 = reference2.addValueEventListener(new ValueEventListener() 
                   {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            reference1.removeEventListener(valueEventListener);
                            if (dataSnapshot.hasChild("count")) {
                                long c = dataSnapshot.child("count").getValue(Long.class);
                                final DatabaseReference reference3 = FirebaseDatabase.getInstance()
                                        .getReference(Utils.ALL_USERS).child(coupon_user_uid)
                                        .child(Utils.USED_COUPONS).child(id);

                                reference3.child("coupon_id").setValue(id);
                                reference3.child("coupon_owner_uid").setValue(coupon_owner_uid);
                                reference3.child("count").setValue(c++)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        reference2.removeEventListener(valueEventListener1);
                                    }
                                });
Rabi Rafique
  • 171
  • 1
  • 5

1 Answers1

0

Maybe its because the listener is invoking itself again each time a write is done. Try to use ListenerForSingleValueEvent, like this:

valueEventListener1 = reference2.addListenerForSingleValueEvent(new ValueEventListener() 
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...............
...............
...............
Hasan Bou Taam
  • 4,017
  • 2
  • 12
  • 22