我正在研究Android应用程序,其中我想在firebase数据库中存储用户的唯一ID,因此为了实现这一点,我创建了一个名为“Users”的根,并将所有用户的唯一ID存储在此根目录中。 / p>
因此,为了检查唯一性,我必须检查“Users”的每个子项,并在检查唯一性后,我将uniqueID添加到“Users”root,或者将通知用户uniqueId不可用。
当我检查唯一性时,它是条件(if / else)在OnChildAdded事件发生之前执行,如何在OnChildAdded事件发生后执行一些代码(在我的代码中提到)
我的代码
postBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!uniqueIdText.getText().toString().trim().equals("")) {
uniqueness = true;
users.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getKey().equals(uniqueIdText.getText().toString().trim()))
uniqueness = false;
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
else if(uniqueIdText.getText().toString().trim().equals("") )
Toast.makeText(LoginActivity.this,"Please enter id",Toast.LENGTH_LONG).show();
//======================How to execute it(code below) after occurrence of OnChildAdded event====================
if (uniqueness){
DatabaseReference usersInfo = users.child(uniqueIdText.getText().toString().trim());
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
else{
if(!uniqueIdText.getText().toString().trim().equals(""))
Toast.makeText(LoginActivity.this, "ID not available, Please enter a new one", Toast.LENGTH_SHORT).show();
}
}
});
答案 0 :(得分:1)
无法知道何时调用了所有onChildAdded
个事件。但您可以使用ValueEventListener
来了解数据库中的第一个数据何时同步。
但在这种情况下,我高度建议采取不同的方法。下载所有UID以检查是否存在一个值是非常低效并且不会扩展。而是将侦听器附加到您要查找的特定UID。如果该值存在,您将获得该值。如果它不存在,您将获得一个空快照:
users.child(uniqueIdText.getText().toString()).addSingleValueEventListener(@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
uniqueness = false;
}
else {
uniqueness = true;
}
...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
// ...
}
};