【发布时间】:2021-08-14 15:34:12
【问题描述】:
我有一个如下所示的 firebase 数据库:
mygame01-default-rtdb
-Rooms
-1
-nrCards: 5
-pin: 10001
-roomName: Test
...
我想检索插入数据库的最后一条记录,检索“pin”值,将其递增,然后使用新 pin 将新记录添加到 Firebase。
我成功检索了该值,在本例中为 10001,将其递增,并将新引脚分配给 room_hc.setPin。但它不起作用。
一切都发生在onClickListener() 方法中:
DatabaseReference ref;
RoomSettingsHelperClass room_hc;
private int nrCardsCount=1, pinNumberIncrement;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_room_settings);
room_hc=new RoomSettingsHelperClass();
ref= FirebaseDatabase.getInstance().getReference().child("Rooms");
final Query queryLastRoom = ref.orderByKey().limitToLast(1);
btn_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//take room name from user and insert it into firebase
room_hc.setRoomName(insertRoomName.getText().toString().trim());
//take nr of cards from user and insert it into firebase
int intNrCards=Integer.parseInt(nrCards.getText().toString().trim());
room_hc.setNrCards(intNrCards);
//take last pin added in firebase, increment it and send new value to firebase (new record)
queryLastRoom.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if(task.isSuccessful()){
for(DataSnapshot snapshot:task.getResult().getChildren()){
int lastPin=snapshot.child("pin").getValue(Integer.class);
pinNumberIncrement=lastPin+1;
txtpinNumber.setText(""+pinNumberIncrement);
Log.d("TAG", "Pin:" + lastPin);
Log.d("TAG", "New pin:" + txtpinNumber.getText());
int pinCount = Integer.parseInt(txtpinNumber.getText().toString().trim());
Log.d("TAG", "Pin count:" + pinCount);
room_hc.setPin(pinCount);
Log.d("TAG", "Final pin:" + room_hc.getPin());
}
}else{
Log.d("TAG", task.getException().getMessage());
}
}
});
});
消息执行的结果是这样的:
D/TAG: Pin:10001
New pin:10002
Pin count:10002
D/TAG: Final pin:10002
但firebase中的结果是这样的(nrCards和roomName已正确更新):
mygame01-default-rtdb
-Rooms
-1
-nrCards: 5
-pin: 10001
-roomName: Test
-2
-nrCards: 4
-roomName: Test2
所以 pin 根本没有更新到 de firebase 数据库中。
我试图复制为room_hc.setNrCards 所做的实现,但似乎不起作用...这是因为onComplete() 方法吗?
RoomSettingsHelperClass 看起来像这样(仅包含参数、getter 和 setter 以及带和不带参数的构造函数):
package com.game.mygame;
public class RoomSettingsHelperClass {
private String roomName;
private Integer pin;
private Integer nrCards;
private Integer pinNumber;
public RoomSettingsHelperClass() {
}
public RoomSettingsHelperClass(String roomName, Integer pin, Integer nrCards, Integer pinNumber) {
this.roomName = roomName;
this.pin = pin;
this.nrCards = nrCards;
this.pinNumber=pinNumber;
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public Integer getPin() {
return pin;
}
public void setPin(Integer pin) {
this.pin = pin;
}
public Integer getNrCards() {
return nrCards;
}
public void setNrCards(Integer nrCards) {
this.nrCards = nrCards;
}
public Integer getPinNumber() {
return pinNumber;
}
public void setPinNumber(Integer pinNumber) {
this.pinNumber = pinNumber;
}
}
有人可以帮助将 pin 持久化到数据库中吗?
【问题讨论】:
-
1) 您能否编辑您的问题以显示
queryLastRoom是如何初始化的? 2)你是如何写入数据库的?我没有看到对 Firebase API 的调用来写入您共享的代码,如果没有它,就很难说写入出了什么问题。 -
我编辑了它。我正在通过 btn_next.setOnClickListener 写入数据库,如下所示:“room_hc.setRoomName(insertRoomName.getText().toString().trim());” RoomName 是 HelperClass 的一部分 我需要 API 吗?
-
我在您将新值写入服务器的问题中没有发现任何代码,必须在
RoomSettingsHelperClass中,您能分享一下吗? -
我更新了问题。我在助手类中什么都没有。只是参数、getter 和 setter 以及构造函数
标签: java android firebase firebase-realtime-database