我到处寻找解决方案,但我还没找到 . 我在检查Firebase上是否存在子项时遇到问题 . 在我的情况下,对于每个独特的用户,我在他第一次打开应用程序时创建了一个sixDigitCode . 所以每当我创建这个sixDigitCode时,我想检查Firebase上是否已经存在sixDigitCode . 因此,如果存在,我可以创建一个新的,直到sixDigitCode是唯一的 . 到目前为止,我已经编写了这段代码但它最终会产生无限循环的无限数量的sixDigitCode,并且永远不会调用onDataChanged . 你能帮我么?谢谢 .
boolean itDoesntExist;
String sixDigitCode;
void addNewUserOnFb() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference users = database.getReference("users");
do {
sixDigitCode = getSixDigitCode(); //Function that returns random six digit code
users.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.hasChild(sixDigitCode)) {
// run some code
itDoesntExist = false;
} else {
itDoesntExist = true;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} while (itDoesntExist == false)
//Do some more code
}
2 回答
您应该使用UID作为用户节点内的密钥或其格式化的电子邮件,以便它可以是数据库的有效密钥,如下所示:
Assumed that you are using Firebase auth and allow only authenticated users to write to your database
You seem to be confused about Asynchronous Method of Firebase. Have a look at Docs
您可以通过以下方式检查用户是否存在:
而Listener是ValueEventListener的一个实例 . 你将在其中覆盖
一方面我在一个循环上放置了Asyncronous执行,但我没有调用onDataChanged的原因是我没有公开读取 . 那个细节花了这么多小时 . 现在它工作正常 . 谢谢您的反馈!问题解决了 .