我有一个firebase,它有一个名为users的节点。用户提供用户名,我想检查该用户名是否已作为用户节点的子节点存在。这是我目前正在尝试的代码。该平台是android。
String myUsername = userNameInputET.getText().toString();
if(mUsersRef.child(myUsername) == null) {
//do stuff
} else {
//do other stuff
}
此代码无效,即使具有给定用户名的子节点不存在,也始终转到else。怎么办?
答案 0 :(得分:0)
{{1}}
答案 1 :(得分: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
});
答案 2 :(得分: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
}
注意:在添加的子项上执行时需要一些时间,因此请添加适当的延迟 我只有一个Node,所以这段代码对我来说非常合适。如果有其他解决方案或更简单的解决方案,请告诉我们。
如果根节点不存在,那么它也将显示为null,因此在部署应用程序推送根节点之前请记住这一点。
答案 3 :(得分:-3)
我认为您需要将代码更改为
int maxSize = 100;
ConcurrentSkipListMap<String, String> cache = new ConcurrentSkipListMap<>();
// Check if max size is reached before inserting something in it. Make some room for new entry.
while (cache.size() >= maxSize) {
cache.pollFirstEntry();
}