【问题标题】:How can I update the data in Firebase after clicked the radio button?单击单选按钮后,如何更新 Firebase 中的数据?
【发布时间】:2018-07-12 02:09:51
【问题描述】:

我正在设计一个票应用程序来获取票。每个餐厅都包含三个派对大小的票号。单选按钮是选项。

我尝试更新 Firebase。

如果用户点击了btnPartSize1_2,希望将QueueA“0”改为1

然而,它不能。我想知道代码中存在一些问题,我正在尝试修改 btnPartySize 按钮部分,以便我不需要重复三次相同的代码。

请帮忙。

The image show the data structure in 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();
                        }


            }
        });

}

有人可以帮忙吗? 真诚希望您的帮助!!

【问题讨论】:

    标签: java android firebase firebase-realtime-database radio-button


    【解决方案1】:

    为使其更简单,请更改代码的逻辑。创建一个 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.
    

    【讨论】:

    • 它仍然对我不起作用。我想知道问题是由数据库引用引起的
    • 引用错误final DatabaseReference QueueA = FirebaseDatabase.getInstance().getReference("QueueA");。 QueueA不在根节点下..所以你需要在它上面添加子节点并检索key
    • @PeterHaddad 我已将根更改为: final FirebaseDatabase database = FirebaseDatabase.getInstance(); final DatabaseReference table_user = database.getReference("Restaurant"); final DatabaseReference QueueA = table_user.child("01");它仍然无法工作
    【解决方案2】:

    引用有误,需要修改:

    目前这是您的参考:

     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");
    

    现在你有:

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

    所以试试这个:

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

    你必须按顺序从上到下,否则参考将是错误的。

    【讨论】:

    • @MollySin 如果这个答案对你有帮助,请点赞,这样也对其他人有帮助,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多