我有一个问题是,只有第一个按钮可见,他没有检查他是否有节点赌场。我有两个帐户,如图中所示,一个带有赌场节点,另一个没有。但opencasino按钮同时显示。在调试中,我可以看到您正在寻找当前用户。但是两个帐户的第一个“ if”结果相同。有谁能够帮助我。预先感谢。
代码
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final String userId = user.getUid();
ref.child("users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if (ref.child("users").child(user.getUid()).equalTo("cassino") != null) {
openCassino.setVisibility(View.VISIBLE);
buyCassino.setVisibility(View.GONE);
} if (ref.child("users").child(user.getUid()).equalTo("cassino") == null ) {
buyCassino.setVisibility(View.VISIBLE);
openCassino.setVisibility(View.GONE);
}
}
}
如果不是,则使用相同的问题
ref.child("users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if (ref.child("users").child(user.getUid()).equalTo("cassino") != null) {
openCassino.setVisibility(View.VISIBLE);
buyCassino.setVisibility(View.GONE);
} else {
buyCassino.setVisibility(View.VISIBLE);
openCassino.setVisibility(View.GONE);
}
}
}
似乎您正在从数据库引用中检查值,而不是侦听器在onDataChange()
中返回的DataSnapshot。>
类似于下面的内容似乎是您想要的,尽管查看代码的编写方式可能不需要for循环本身。
for (DataSnapshot ds : dataSnapshot.getChildren()) { if (ds.child("cassino").exists()) { openCassino.setVisibility(View.VISIBLE); buyCassino.setVisibility(View.GONE); } else { buyCassino.setVisibility(View.VISIBLE); openCassino.setVisibility(View.GONE); } }
附加说明
您可能希望将数据库逻辑与可见性逻辑脱钩;除非当然是为了简化表达问题的方式而写的。