Android 如何检查firebase中是否存在子级?

Android 如何检查firebase中是否存在子级?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个firebase,它有一个名为users的节点。用户提供了一个用户名,我想检查该用户名是否已经作为用户节点的子节点存在。这是我目前正在尝试的代码。平台是android String myUsername = userNameInputET.getText().toString(); if(mUsersRef.child(myUsername) == null) { //do stuff } else { //do other stuff } 此代码不起作用,它总是转到else,即使给定

我有一个firebase,它有一个名为users的节点。用户提供了一个用户名,我想检查该用户名是否已经作为用户节点的子节点存在。这是我目前正在尝试的代码。平台是android

String myUsername = userNameInputET.getText().toString();
if(mUsersRef.child(myUsername) == null) {
//do stuff
} else {
//do other stuff
}

此代码不起作用,它总是转到else,即使给定用户名的子项不存在。怎么办?

我认为您需要将代码更改为

String myUsername = userNameInputET.getText().toString();
if(mUsersRef.child(myUsername).getValue() == null) {
   //do stuff
} else {
   //do other stuff
}
String myUsername=“User”;
if(root.child(myUsername).getRoot()==null){
}否则{
Map Map=newhashmap();
map.put(“用户”,“用户”);
root.updateChildren(map);
您好,请检查此项


在这个问题上浪费了两个小时。尝试了所有方法,但没有一个有效的解决方案。 我使用firebase OnChildaded的数据读取代码获取用户数据,然后使用if-else条件确定它

立即创建

mFirebaseDatabase=FirebaseDatabase.getInstance();
mMessagesDatabaseReference=mFirebaseDatabase.getReference().child("user").child(root).child(id);
    attachDatabaseReadListener();
侦听器方法

    private void attachDatabaseReadListener() {
    if ( mChildEventListener == null) {
        mChildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                User u = dataSnapshot.getValue(User.class);
                mUser=u.GetUser();
                mEmail=u.GetEmailId();
                Toast.makeText(getApplicationContext(),"here"+mUser,Toast.LENGTH_SHORT).show();
            }
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
            public void onChildRemoved(DataSnapshot dataSnapshot) {}
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
            public void onCancelled(DatabaseError databaseError) {}
        };
        mMessagesDatabaseReference.addChildEventListener( mChildEventListener);

    }
}
条件检查,它可以是任何东西

 if(mUser==null&&mEmail==null) {
      //do something here
  }
 else
 {
 //do nothing
 }
注意:在添加的子项上执行需要一些时间,因此添加适当的延迟 我只有一个节点,所以这段代码对我来说非常适合。如果有其他解决方案或更简单的解决方案,请告诉我

若根节点不存在,那个么它也将显示null,所以在部署应用程序推送根节点之前请记住这一点


这里有一种方法可以做到这一点:(这个答案适用于Firebase的JavaScript SDK,但逻辑与任何受支持的平台相同)。您能描述一下为什么选择此解决方案吗?@Hassan Amjad,这似乎是一个不错的尝试,但当我运行该代码时,即使“用户”节点不存在,它仍然给我一个URL。它从来都不是空的。我也尝试了root.child(myUsername).getKey()。但即使失败了。还有其他想法吗?我想他在寻找一个可以与Java一起使用的答案,而不是Javascript。
    private void attachDatabaseReadListener() {
    if ( mChildEventListener == null) {
        mChildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                User u = dataSnapshot.getValue(User.class);
                mUser=u.GetUser();
                mEmail=u.GetEmailId();
                Toast.makeText(getApplicationContext(),"here"+mUser,Toast.LENGTH_SHORT).show();
            }
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
            public void onChildRemoved(DataSnapshot dataSnapshot) {}
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
            public void onCancelled(DatabaseError databaseError) {}
        };
        mMessagesDatabaseReference.addChildEventListener( mChildEventListener);

    }
}
 if(mUser==null&&mEmail==null) {
      //do something here
  }
 else
 {
 //do nothing
 }