Reputation: 117
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
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