java - 注册页面、Toast 和 Firebase

标签 java android firebase firebase-realtime-database android-toast

我的 Firebase 注册页面有问题,尤其是 Toast。我使用 firebase 数据库。 在我的注册页面中,我将用户的数据放入数据库中,但如果用户名与数据库中的另一个用户名相同,则应用程序会向我显示一个 toast (“用户名已注册,请重试”),然后就可以了。 当我使用新用户名注册时, toast 会显示“注册成功”,然后我会看到一系列 toast ,其中写着:“用户名已注册,请重试”。 我认为这个问题很简单,但我不知道解决方案。 预先感谢您。

enter image description here

注册.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/

相关文章:

java - 有效比较两个 ArrayList

java - 递归程序中类变量到方法参数的转换

android - 如何更改umano滑动面板中可见区域的高度?

java - 有没有更好的方法用 Java 编写此代码(用于 Web 表处理)?

java - 线程对信号 3 作出 react

android - 如何使用 onRetainNonConfigurationInstance() 为屏幕方向保存位图?

java - 我获得了 listView 中每个项目的 key 并将其保存到 Firebase 我想将该 key 发送到另一个 Activity ,但每次我获得相同的 key

Firebase 存储不适用于 ionic 3 和 AngularFire 4.0.0 rc

ios - 转至聊天 View Controller

java - Jasper 报告 JAVA Swing