在用户按下“路由”按钮后,我尝试将Firebase中的mcustDelivery状态从“接受”更新为“路由”。 但是每当我按下“路由”按钮时,firebase就会更改为“路由”,然后立即变回“接受”。 这是我的用于路线按钮的setOnClickListener。
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) {
}
});
}
});
下面的代码是我在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();
}
});
} });
答案 0 :(得分:2)
很简单,您已经使用addValueEventListener来接受要在同一引用中更改值的请求。因此,addValueEventListener触发并再次将值更改为接受。有关写入,请参阅firebase docs for read and write
private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child(getKey()).child("mcustDeliveryStatus").setValue("Accepted")
或将addValueEventListener更改为addListenerForSingleValueEvent的简单修订