简体   繁体   English

单击单选按钮后如何更新Firebase中的数据?

[英]How can I update the data in Firebase after clicked the radio button?

I am designing a ticket app to get ticket. 我正在设计一个票务应用程序来获取票证。 Every restaurant contain the ticket number of three party size. 每家餐厅均包含三方规模的门票号码。 Radio buttons are the choices. 单选按钮是选择。

I try to update the Firebase. 我尝试更新Firebase。

Hope to change QueueA "0" to 1 if the user has clicked the btnPartSize1_2 如果用户单击了btnPartSize1_2,希望将QueueA“ 0”更改为1

Yet, it can't. 但是,不能。 I am wondering there is some problem in codes and I am trying to modify the btnPartySize button part so that I need not duplicate the same codes in three times. 我想知道代码中存在一些问题,并且我试图修改btnPartySize按钮部分,以使我不必重复三遍相同的代码。

Please help. 请帮忙。

The image show the data structure in Firebase 该图显示了Firebase中的数据结构

public class Queue extends AppCompatActivity {

    RadioGroup radioGroup;
    RadioButton btnPartySize1_2, btnPartySize3_4, btnPartySize5_6;
    Button buttonQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_queue);

        buttonQueue = (Button) findViewById(R.id.btnQueue);
        btnPartySize1_2 = (RadioButton) findViewById(R.id.btnPartySize1_2);
        btnPartySize3_4 = (RadioButton) findViewById(R.id.btnPartySize3_4);
        btnPartySize5_6 = (RadioButton) findViewById(R.id.btnPartySize5_6);
        final RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference table_user = database.getReference("Restaurant");
        final DatabaseReference QueueA = FirebaseDatabase.getInstance().getReference("QueueA");
        final DatabaseReference QueueB = FirebaseDatabase.getInstance().getReference("QueueB");
        final DatabaseReference QueueC = FirebaseDatabase.getInstance().getReference("QueueC");

        buttonQueue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              if(btnPartySize1_2.isChecked()) {

                            ValueEventListener eventListener = new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    int QueueA = dataSnapshot.child("QueueA").getValue(Integer.class);
                                    QueueA++;
                                    this.child("QueueA").setValue(QueueA);
                                    Toast.makeText(Queue.this, "You have collected", Toast.LENGTH_SHORT).show();
                                }

                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            };
                            QueueA.addListenerForSingleValueEvent(eventListener);
                        } else if (btnPartySize3_4.isChecked()) {


                            ValueEventListener eventListener = new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    int counter = dataSnapshot.child("counter").getValue(Integer.class);
                                    counter++;
                                    QueueB.child("counter").setValue(counter);
                                    Toast.makeText(Queue.this, "You have collected", Toast.LENGTH_SHORT).show();
                                }

                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            };
                            QueueB.addListenerForSingleValueEvent(eventListener);

                        } else if (btnPartySize5_6.isChecked()) {


                            ValueEventListener eventListener = new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    int counter = dataSnapshot.child("counter").getValue(Integer.class);
                                    counter++;
                                    QueueC.child("counter").setValue(counter);
                                    Toast.makeText(Queue.this, "You have collected", Toast.LENGTH_SHORT).show();
                                }

                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            };
                            QueueC.addListenerForSingleValueEvent(eventListener);

                        } else {

                            Toast.makeText(Queue.this, "Please choose party size", Toast.LENGTH_SHORT).show();
                        }


            }
        });

}

Can anyone help? 有人可以帮忙吗? Want your help sincerely!! 真诚希望您的帮助!

To make it simpler, change the logic of your code. 为了使其更简单,请更改代码的逻辑。 Create a single ValueEventListener object and inside onDataChange() method add the logic about your radio buttons. 创建单个ValueEventListener对象,并在onDataChange()方法内部添加有关单选按钮的逻辑。

if(btnPartySize1_2.isChecked()) {
    int QueueA = dataSnapshot.child("QueueA").getValue(Integer.class);
    QueueA++;
    this.child("QueueA").setValue(QueueA);
} else if () {
    int counter = dataSnapshot.child("counter").getValue(Integer.class);
    counter++;
    QueueB.child("counter").setValue(counter);
}
// and so on.

You need to change the reference since it is wrong: 您需要更改引用,因为它是错误的:

Currently this is your reference: 目前,这是您的参考:

 FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference table_user = database.getReference("Restaurant");
    final DatabaseReference QueueA = FirebaseDatabase.getInstance().getReference("QueueA");
    final DatabaseReference QueueB = FirebaseDatabase.getInstance().getReference("QueueB");
    final DatabaseReference QueueC = FirebaseDatabase.getInstance().getReference("QueueC");

Now you have: 现在您有了:

 rootnode
     Category
     Restaurant
         01
           Key:value
           key:value //one of those is QueueA

So try this: 所以试试这个:

       FirebaseDatabase database = FirebaseDatabase.getInstance();
       final DatabaseReference ref=database.getReference().child("Restaurant").child("01").child("QueueA");

You have to go by order from top to bottom or the reference will be wrong. 您必须按照从上到下的顺序进行操作,否则引用将是错误的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM