所以我有一个游戏大厅,在这里用户创建游戏时,其用户名以及他们在游戏上下注的游戏币值将显示在屏幕上,供所有玩家在RecyclerView中查看。
因此,在这种情况下,名为“ Brent_MB”的用户创建了一个游戏
但是问题是玩家在游戏上下注2.00,因此不会出现。 (2.50是显示的默认数字)
这就是我的数据库结构
因此,由于该数据库是如此动态,因此每次有人要玩游戏时,它实际上都会更改,并且在游戏开始时会被删除,我该如何为当前表示“ 2.50”的插槽分配下注值
这是我尝试做的事情:
我已经为下注变量创建了这样的回调,
public void getWager(final WagerCallback wagerCallback) {
FCGames.child("What do I put here to check each node every time a node is added")
.child("wager").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
wagerr = (long) dataSnapshot.getValue();
String wagerD = Double.toString(wagerr);
wage = wagerD.endsWith("0");
wagerCallback.onCallback(wagerD);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
我也有一个与此相关的回调接口,
然后在我的RecyclerView类中调用此方法,如下所示:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
String userName = mData.get(position);
holder.userName.setText(userName);
holder.bind(mData.get(position), position, listener);
fcl.getWager(new FlipCoinLobby.WagerCallback() {
@Override
public void onCallback(String wager) {
holder.wager.setText(wager);
}
});
}
如您所见,在这一行中,我坚持将第一个孩子放置什么,以便它可以在添加每个孩子时检查每个孩子并获得该下注值。 \
FCGames.child("What do I put here to check each node every time a node is added").child("wager")
我应该放在那里,以便它可以从每个节点获取下注值并将其正确分配给文本视图区域?
FCGames数据库中的每个初始节点都存储在一个名为openGames的ArrayList中。我可以显示在必要时如何将节点添加到该列表中
wages.add(wagerD);
for(int i=0; i <= openGames.size(); i++) {
wagerCallback.onCallback(wages.get(i));
}
答案 0 :(得分:1)
由于您不知道要加载的子节点的密钥,因此有两种选择:
FCGames
的所有子节点。FCGames
的第一个/最后一个子节点。我将显示第二个选项,因为第一个选项很容易从中得出:
FCGames.orderByKey()
.limitToFirst(1)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
wagerr = snapshot.child("wager").getValue(Long.class);
String wagerD = Double.toString(wagerr);
wage = wagerD.endsWith("0");
wagerCallback.onCallback(wagerD);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
最大的区别是:
onDataChange
中使用循环,因为查询可以具有多个结果(尽管该结果不会)。