我正在使用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();
}
}
}
答案 0 :(得分:4)
第一次mobileNumber
不存在,因此要执行其他部分并添加子节点值,并在同一节点下添加数据时,onDataChange
将再次触发,这次{{1 }}部分将被执行。
为防止if
通话两次,请使用onDataChange
而不是SingleEventListener
ValueEventListener