gpt4 book ai didi

java - 如何检查用户名是否已存在于我的 firebase 数据库中?

转载 作者:行者123 更新时间:2023-12-02 01:20:12 27 4
gpt4 key购买 nike

无法让 Firebase 识别已输入的用户名。下面的代码显示我正在尝试将输入的用户名与数据库的 DataSnapshot 进行比较。该代码似乎没有获取输入的用户名。代码有错吗?

private boolean mSwitch = false;

public void checkInfo(View view){

checkUsernameIsUnique();
checkInformation();

if(mSwitch) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
saveUserInformation();
startActivity(intent);
}
}
<小时/>
public void checkUsernameIsUnique(){

String username = Username.getText().toString().trim();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usernameRef = rootRef.child("user_profile_info").child(userID);
Query checkName = usernameRef.equalTo(username);
checkName.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String name = Username.getText().toString().trim();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if(name.equals(ds.child("username").getValue(String.class))){

Username.setError("Username Taken");
Username.requestFocus();

} else {
Toast.makeText(ProfileActivity.this, "Registered User", Toast.LENGTH_SHORT).show();
mSwitch = true;
}
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

if(Username.getText().toString().equals("")){

Username.setError("A Username is Required");
Username.requestFocus();

}

if(Username.length() < 5){

Username.setError("Username must be 5 characters minimum");
Username.requestFocus();

}
}

单击按钮时,我希望能够将用户引导至错误,并且在该错误唯一之前,不应将页面推送到下一个 Activity 。

<小时/>

JSON 树(如果有帮助的话)

"user_profile_info" : {
"8FUV95JorVT26Gd1QFNUbxEf8O93" : {
"date_of_birth" : "2/5/1925",
"diet" : "Moderate",
"drinker" : "No",
"education" : "Masters Degree",
"exercise" : "3 - 5 Hours a Week",
"forename" : "Ben",
"gender" : "Male",
"have_alzheimers" : "No",
"have_diabetes" : "No",
"have_parkinsons" : "No",
"history_alzheimers" : "No",
"history_diabetes" : "No",
"history_parkinsons" : "No",
"marital_status" : "Single",
"smoker" : "No",
"surname" : "Dover",
"username" : "Maturity101"
}

最佳答案

addListenerForSingleValueEvent 是一个异步操作。设置回调 onDataChange() 后,代码会继续运行,但您尚未获取任何用户名。当您检查 mSwitch 值时,即使用户名正确,它也始终为 false。

要使其正常工作,您应该移动您的

checkInformation();
if(mSwitch) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
saveUserInformation();
startActivity(intent);
}

onDataChange() 回调的末尾。

此外,在查询文档之前最好先检查空字符串和长度。只是为了削减从数据库下载的无用数据。

但是由于 for 循环,它似乎仍然无法工作。尝试这样:

mSwitch = true; // as its OK
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if(name.equals(ds.child("username").getValue(String.class))){
mSwitch = false;
Username.setError("Username Taken");
Username.requestFocus();
break;
}
}

...
if (mSwitch) startActivity();
else showErrorToast();

关于java - 如何检查用户名是否已存在于我的 firebase 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837902/

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