gpt4 book ai didi

android - 我需要等到监听器将 bool 值从 null 更改为 false/true java

转载 作者:行者123 更新时间:2023-11-30 00:47:23 25 4
gpt4 key购买 nike

我有一个 Firebase 监听器,它检查用户是否存在(我正在使用 Firebase 数据库进行登录/注册)以判断用户名是否已被占用,问题是它需要点击 2 次注册按钮才能工作,因为监听器无法判断用户名是否存在或速度不够快,只有当它已经决定第一次点击时第二次点击才可以注册,但它又不会真正检查第二次点击的用户名(如果我立即更改用户名,即使已被使用也能正常工作)

database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users/" + usernameEt.getText().toString() +"/password");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
if(value != null) {
Toast.makeText(getApplicationContext(), "Username Taken", Toast.LENGTH_SHORT).show();
clear = false;
}else
clear = true;
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
clear = false;
Toast.makeText(getApplicationContext(), "Internet Error", Toast.LENGTH_SHORT).show();
}
});

//insert check if clear has value

if(!clear) //TODO FIX takes time to the listener to do the job
return false;

clear 是一个 bool 型var,第一次运行时为null,此代码用于检查用户名是否被占用

最佳答案

也许你的代码是这样的:

@Override
public void onCreate(Bundle savedInstanceState) {
...
signUpBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (checkUserExists()) {
...
} else {
signUp();
}
}
}
}

private boolean checkUserExists() {
database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users/" + usernameEt.getText().toString() +"/password");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
if(value != null) {
Toast.makeText(getApplicationContext(), "Username Taken", Toast.LENGTH_SHORT).show();
clear = false;
}else
clear = true;
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
clear = false;
Toast.makeText(getApplicationContext(), "Internet Error", Toast.LENGTH_SHORT).show();
}
});

//insert check if clear has value

if(!clear) //TODO FIX takes time to the listener to do the job
return false;
}

private void signUp() {
...
}

你应该把它改成:

@Override
public void onCreate(Bundle savedInstanceState) {
...
signUpBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkUserExists();
}
}
}

private boolean checkUserExists() {
database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users/" + usernameEt.getText().toString() +"/password");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
if(value != null) {
Toast.makeText(getApplicationContext(), "Username Taken", Toast.LENGTH_SHORT).show();
} else {
signUp(); // sign up here
}
}
@Override
public void onCancelled(DatabaseError error) {
Toast.makeText(getApplicationContext(), "Internet Error", Toast.LENGTH_SHORT).show();
}
});
}

private void signUp() {
...
}

您还可以在检查用户数据时阻止用户输入:

private boolean checking = false; // added

@Override
public void onCreate(Bundle savedInstanceState) {
...
signUpBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (checking) return; // added
checkUserExists();
checking = true; // added
}
}
}

private boolean checkUserExists() {
database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users/" + usernameEt.getText().toString() +"/password");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
checking = false; // added
String value = dataSnapshot.getValue(String.class);
if(value != null) {
Toast.makeText(getApplicationContext(), "Username Taken", Toast.LENGTH_SHORT).show();
} else {
signUp(); // sign up here
}
}
@Override
public void onCancelled(DatabaseError error) {
checking = false; // added
Toast.makeText(getApplicationContext(), "Internet Error", Toast.LENGTH_SHORT).show();
}
});
}

private void signUp() {
...
}

希望它有用。

关于android - 我需要等到监听器将 bool 值从 null 更改为 false/true java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41561723/

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