[英]Android Firebase Database checking if user is in specific group
我有5种不同的用户类型,我想检查某个用户是否属于4种特殊用户类型之一,并根据该用户类型更改菜单ui。 这是我自己发现的,但是不起作用。
mDatabase.child("staff").orderByChild(mAuth.getUid()).equalTo("true").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String staffType = dataSnapshot.getKey();
if (staffType == "servers"){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
}
我的firebase数据库
更改此:
if (staffType == "servers"){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
到这个:
if (staffType.equals("servers")){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
从文档:
public boolean equals(Object anObject)
将此字符串与指定对象进行比较。 当且仅当参数不为null并且是一个String对象,表示与此对象相同的字符序列时,结果为true。
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)
Peter的回答突出了一个问题,但是您的代码还有另外一件事。
当您对Firebase数据库执行查询时,可能会有多个结果。 因此,快照包含这些结果的列表。 即使只有一个结果,快照也将包含一个结果的列表。
因此, onDataChange
的代码需要通过遍历dataSnapshot.getChildren()
来处理可能的多个子dataSnapshot.getChildren()
:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
String staffType = userSnapshot.getKey();
if (staffType.equals("servers")){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
}
尽管检查可能适用于这些更改,但是由于需要查看太多数据才能找到所需的用户,因此它在规模上永远不会高效。 您当前的数据结构使您可以有效地查找给定角色的所有用户。 但是,它不允许有效查找特定用户的角色。 为此,您应该添加具有该信息的其他数据结构:每个UID的角色。 所以像这样:
user-roles
"22yXY813cW...": "server"
"uid2": "cook"
使用此附加结构,您可以有效地为用户查找角色,而无需查询:
mDatabase.child("user-roles").child(mAuth.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String staffType = dataSnapshot.getKey();
if (staffType.equals("servers")){
mTitles = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.menuUser)));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.