首页 文章

无法检查Firebase中是否存在子项

提问于
浏览
0

我到处寻找解决方案,但我还没找到 . 我在检查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 回答

  • 0

    您应该使用UID作为用户节点内的密钥或其格式化的电子邮件,以便它可以是数据库的有效密钥,如下所示:

    String key = mAuth.getInstance().getCurrentUser().getEmail().replace(".","_").replace("@","_");
    

    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

    您可以通过以下方式检查用户是否存在:

    ref.child(key).addSingleValueEventListener(listener);
    

    而Listener是ValueEventListener的一个实例 . 你将在其中覆盖

    @Override
    onDataChange(DataSnapshot snap){
    if(snap.exists()){
      //Your user exist no need to create one.
    }
    else{
    //do your logic
       }
    }
    
  • 0

    一方面我在一个循环上放置了Asyncronous执行,但我没有调用onDataChanged的原因是我没有公开读取 . 那个细节花了这么多小时 . 现在它工作正常 . 谢谢您的反馈!问题解决了 .

相关问题