我需要获取与我之前在另一个表中循环的用户 ID 相匹配的每个事件的键,因此,我有这个表,其中当前登录的用户 ID 有一个用户列表,这些用户将有助于特定事件
我以用户 MUTzo13NuJRlbbkZCDp2nCdHkIn1
身份登录,然后我只获取该 id 以下的所有用户,这样我就知道我邀请了哪一个
我已经用这个做到了
mDatabase.child("userEvent").child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot snapshot1 : dataSnapshot.getChildren()){
final String users = snapshot1.getKey();
...
所以,现在我的用户字符串包含了当前登录的所有用户。
现在,由于我拥有属于已登录用户的所有用户,因此我想循环另一个表,找到匹配的用户并获取 key (这些用户未协助的事件ID)
表事件
如果之前循环的用户在其中,我需要获取例如 ID LT9d-sJCmMBUIW14AG8
,所以我只是尝试了这个
mDatabase.child("userEvent").child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot snapshot1 : dataSnapshot.getChildren()){
final String user = snapshot1.getKey();
//Now I go to the events table and try to get the event ID if those users are inside of them
mDatabase.child("events").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot snapshot2 : dataSnapshot.getChildren()){
if(snapshot2.equals(user))
Log.d(TAG, "onDataChange: "+snapshot2.getKey());
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
但是它不起作用,getKey返回的是名称节点事件,而不是用户所属节点的名称。
有什么建议吗?
编辑:
感谢 Peter 的回答,我遇到了一个问题,即用户与他们不属于的事件相匹配
所以,问题在于它与不属于它的事件用户匹配
最佳答案
尝试以下操作:
mDatabase.child("events").orderByChild(user).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot snapshot2 : dataSnapshot.getChildren()){
String keys = snapshot2.getKey();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
您需要添加在 orderByChild()
内的第一个监听器中检索到的 user
字符串,然后您将获得包含该子项的快照。循环后您将能够获取该子级的父级 key 。
关于java - 如何从内部匹配值获取节点键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695742/