Firebase数据保持循环

时间:2019-09-17 16:27:48

标签: java android firebase firebase-realtime-database

在用户按下“路由”按钮后,我尝试将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();
}

});

} });

1 个答案:

答案 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的简单修订