我需要获取与我之前在另一个表中循环过的用户ID匹配的每个事件的键,因此,我有此表,其中已登录的当前userID具有将有助于以下操作的用户列表:某些事件
我以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();
...
所以,现在我的用户字符串中已经有当前登录的所有用户。
现在,由于我拥有所有已登录用户,所以我想循环另一张表,找到匹配的用户并获取密钥(这些用户没有协助的事件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返回名称节点事件,而不是用户所属节点的名称。
任何提示?
编辑:
感谢彼得的回答,我遇到了麻烦,那就是用户与他们不属于的事件保持良好的匹配状态
所以,问题在于它与不属于它的事件用户匹配
答案 0 :(得分:1)
尝试以下操作:
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) {
}
});
您需要在user
内的第一个侦听器中添加检索到的orderByChild()
字符串,然后您将获得一个包含该子级的快照。循环后,您将能够获取该孩子的父密钥。