Saraladewi
Saraladewi

Reputation: 117

Firebase Data Keep Looping

I am trying to update my mcustDelivery status, from "Accept" to "Enroute" in Firebase after user press enroute button. but whenever, I press enroute button, the firebase change to "Enroute" and immediately changes back to "Accept". This is my setOnClickListener for enroute button.

OrderStatus.Java

     enroute.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDatabase.child(key).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        dataSnapshot.getRef().child("mcustDeliveryStatus").setValue("Enroute");
        enroute.setImageResource(R.drawable.greenenroute);
        deliver.setImageResource(R.drawable.bluedeliver);
        enroute.setMaxWidth(266);
        enroute.setMaxHeight(150);
        deliver.setMaxWidth(266);
        deliver.setMaxHeight(150);


    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});


            }
        });

this below code is where i get the the Accepted status on ViewNewOrder.java

 accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

 mDatabase.child(getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    dataSnapshot.getRef().child("mcustDeliveryStatus").setValue("Accepted");
    Intent orderStatus = new Intent(ViewOrderRequest.this, orderStatus.class);
    startActivity(orderStatus);
    Toast.makeText(getApplicationContext(),"notification sent to customers",Toast.LENGTH_LONG).show();


    //start new activity show root map

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    Toast.makeText(getApplicationContext(),"not updates",Toast.LENGTH_LONG).show();
}

});

} });

Upvotes: 0

Views: 40

Answers (1)

muthugiridharan
muthugiridharan

Reputation: 120

It's simple you have used addValueEventListener for accepting the request you are changing the value in the same reference. So the addValueEventListener triggered up and again change the value to accept. For writing, data refer firebase docs for read and write

private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();    
mDatabase.child(getKey()).child("mcustDeliveryStatus").setValue("Accepted")

or simple fix change that addValueEventListener to addListenerForSingleValueEvent

Upvotes: 2

Related Questions