[英]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.