2015-04-02 33 views
4

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

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

此代码不能正常工作,它总是转到别的,即使与给定用户名孩子不存在。该怎么办?

+1

这样做的一种方法记录在这里:http://stackoverflow.com/q/24824732/209103(该答案适用于Firebase的JavaScript SDK,但逻辑与任何支持的平台相同)。 – 2015-04-02 00:29:32

回答

-3

我相信你需要更改您的代码

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

    if (root.child(myUsername).getRoot() == null) { 

    } else { 
     Map<String, Object> map = new HashMap<String, Object>(); 
     map.put("user", ""); 
     root.updateChildren(map);  
+0

你能描述你为什么选择这个解决方案吗? – Squazz 2016-09-21 08:35:48

+0

@Hassan Amjad,这似乎是一个不错的尝试,但是当我运行该代码时,即使“用户”节点不存在,它仍然给了我一个URL。它从不为空。我也试过root.child(myUsername).getKey()。但即使如此,其他想法也失败了。 – user3833732 2017-07-04 17:39:13

0

你好检查这个https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot

// Test for the existence of certain keys within a DataSnapshot 
var ref = firebase.database().ref("users/ada"); 
ref.once("value") 
    .then(function(snapshot) { 
    var a = snapshot.exists(); // true 
    var b = snapshot.child("name").exists(); // true 
    var c = snapshot.child("name/first").exists(); // true 
    var d = snapshot.child("name/middle").exists(); // false 
    }); 
+3

我认为他正在寻找一个可以用于Java而不是Javascript的答案。 – aconnelly 2016-11-20 09:05:16

0

浪费两小时这个问题。尝试了一切,但没有任何解决方案奏效。 我使用firebase onChildAdded的数据读取代码来获取用户数据,然后使用if else条件来确定它。

在的onCreate

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 
} 

注:需要一些时间来执行对儿童加入这么加适当的延迟 我只有一个节点,以便该代码工作完美的我。如果有其他解决方案或更简单的解决方案可用,请让我知道。

如果根节点不存在,那么它也将显示为空,因此请在部署应用程序推送根节点之前记住这一点。