Firebase的exists()函数突然出现

时间:2019-01-14 10:28:21

标签: android firebase

enter image description here enter image description here

我正在使用exists()中快照对象的Firebase方法来检查是否存在用户按下SignUp(register)按钮时的情况。但是,一旦我按下按钮,就同时执行if和else条件(否则先执行)。怎么了?

    final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users");

    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            databaseReference.addValueEventListener(new ValueEventListener() {
                public static final String TAG = "user_REG";

                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if(dataSnapshot.child(mobileNumber.getText().toString()).exists()){
                        Log.d(TAG, "onDataChange: if fired");
                    } else {
                        Log.d(TAG, "onDataChange: else fired");
                        if(confirmPass.getText().toString().trim().equals(userPass.getText().toString().trim())){
                            userModel userModel = new userModel(fullName.getText().toString(), userPass.getText().toString());
                            databaseReference.child(mobileNumber.getText().toString()).setValue(userModel);
                            Toast.makeText(user_reg.this, "Successfully Signed Up", Toast.LENGTH_SHORT).show();
                            finish();
                        } else {
                            Toast.makeText(user_reg.this, "Your Passwords do not match", Toast.LENGTH_SHORT).show();
                        }
                    }
                }

1 个答案:

答案 0 :(得分:4)

第一次mobileNumber不存在,因此要执行其他部分并添加子节点值,并在同一节点下添加数据时,onDataChange将再次触发,这次{{1 }}部分将被执行。

为防止if通话两次,请使用onDataChange而不是SingleEventListener

ValueEventListener