Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 控制firebase数据库中OnChildaded事件的发生_Android_Events_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 控制firebase数据库中OnChildaded事件的发生

Android 控制firebase数据库中OnChildaded事件的发生,android,events,firebase,firebase-realtime-database,Android,Events,Firebase,Firebase Realtime Database,我正在开发android应用程序,我想在firebase数据库中存储用户的唯一ID,因此为了实现这一点,我创建了一个名为“users”的根,并将所有用户的唯一ID存储在此根中 因此,为了检查唯一性,我必须检查“Users”的每个子级,在检查唯一性之后,我将把uniqueID添加到“Users”根目录中,或者通知用户uniqueID不可用 当我检查唯一性时,它的条件(if/else)在onchildaded事件发生之前执行,如何在onchildaded事件发生之后执行一些代码(在我的代码中提到)

我正在开发android应用程序,我想在firebase数据库中存储用户的唯一ID,因此为了实现这一点,我创建了一个名为“users”的根,并将所有用户的唯一ID存储在此根中

因此,为了检查唯一性,我必须检查“Users”的每个子级,在检查唯一性之后,我将把uniqueID添加到“Users”根目录中,或者通知用户uniqueID不可用

当我检查唯一性时,它的条件(if/else)在onchildaded事件发生之前执行,如何在onchildaded事件发生之后执行一些代码(在我的代码中提到)

我的代码

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();
                    }


            }
        });

无法知道何时调用了所有的
onchildaded
事件。但是,您可以通过使用
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());
        // ...
    }
};