我的 Firebase 注册页面有问题,尤其是 Toast。我使用 firebase 数据库。 在我的注册页面中,我将用户的数据放入数据库中,但如果用户名与数据库中的另一个用户名相同,则应用程序会向我显示一个 toast (“用户名已注册,请重试”),然后就可以了。 当我使用新用户名注册时, toast 会显示“注册成功”,然后我会看到一系列 toast ,其中写着:“用户名已注册,请重试”。 我认为这个问题很简单,但我不知道解决方案。 预先感谢您。
注册.java:
public class Registration extends AppCompatActivity {
EditText ET_USER_LOCATION, ET_USER_MAIL, ET_USER_NAME, ET_USER_PASS;
String user_location, user_mail, user_name, user_pass, user_bitmapImage = "NoImage";
Button registerButton;
Context mContext;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference users = database.getReference("Users").child("UserApp");
String key = users.child("UserApp").push().getKey();
String token = FirebaseInstanceId.getInstance().getToken();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
mContext = this;
ET_USER_LOCATION = (EditText) findViewById(R.id.new_user_location);
ET_USER_MAIL = (EditText) findViewById(R.id.new_user_mail);
ET_USER_NAME = (EditText) findViewById(R.id.new_user_name);
ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass);
registerButton = (Button) findViewById(R.id.registerButton);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
user_location = ET_USER_LOCATION.getText().toString();
user_mail = ET_USER_MAIL.getText().toString();
user_name = ET_USER_NAME.getText().toString();
user_pass = ET_USER_PASS.getText().toString();
users.addValueEventListener(new ValueEventListener() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String result = registerWithoutRepetition(dataSnapshot);
if(Objects.equals(result, "Username is already registered, try again")){
Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show();
} else if(Objects.equals(result, "Registration Success")){
Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show();
finish();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private String registerWithoutRepetition(DataSnapshot dataSnapshot){
String result;
for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
UserApp userApp = snapshot.getValue(UserApp.class);
if (Objects.equals(userApp.user_name, user_name)) {
result = "Username is already registered, try again";
return result;
}
}
writeNewUser(key, user_name, user_mail, user_pass, user_location, token, user_bitmapImage);
result = "Registration Success";
return result;
}
private void writeNewUser(String user_id, String user_name, String user_mail, String user_pass,
String user_location, String user_token, String user_bitmapImage) {
UserApp user = new UserApp(user_name, user_mail, user_pass, user_location, user_token, user_bitmapImage);
users.child(user_id).setValue(user);
}
最佳答案
使用 addValueEventListener() 注册监听器后,每次用户节点发生更改时都会触发该监听器。
您可能只对单个事件感兴趣,在这种情况下您可以 use addListenerForSingleValueEvent() .
关于java - 注册页面、Toast 和 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412885/