gpt4 book ai didi

android - Firebase 的 exists() 函数行为突然

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:34 25 4
gpt4 key购买 nike

enter image description here enter image description here

我使用 Firebase 中快照对象的 exists() 方法来检查用户是否在按下 SignUp(register) 按钮时存在。但是只要我按下按钮,if 和 else 条件都会被执行(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();
}
}
}

最佳答案

第一次 mobileNumber 不存在,所以执行其他部分并添加子节点值,并且在同一节点下添加数据时,onDataChange 将再次触发并这一次,if 部分将被执行。

为了防止 onDataChange 调用两次,使用 SingleEventListener 而不是 ValueEventListener 像这样

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = (String) dataSnapshot.getValue();
// do your stuff here with value
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});

关于android - Firebase 的 exists() 函数行为突然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54179683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com