首页 > 解决方案 > 来自 firebase 实时数据库的名称和密码

问题描述

我最近拿起了android dev并被卡住了。我想从实时数据库中获取用户名和密码来登录用户。我遵循了一个教程,并且在 logcat 中没有任何错误。也许问题出在我为 textinputlayout 编写的 XML 代码中,所以也分享了它。我将非常感谢任何形式的帮助:D

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/loginName"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:background="@drawable/bg_edit_text"
    app:boxStrokeWidth="0dp"
    app:boxStrokeWidthFocused="0dp"
    android:backgroundTint="@android:color/transparent"
    >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:background="@drawable/bg_edit_text"
        android:inputType="text"
        />
</com.google.android.material.textfield.TextInputLayout>

MainActivity.java

private Boolean validateUsername() {
    String val = loginName.getEditText().getText().toString();

    if (val.isEmpty()) {
        loginName.setError("Field cannot be empty");
        return false;
    } else {
        loginName.setError(null);
        loginName.setErrorEnabled(false);
        return true;
    }

}

private Boolean validatePassword() {
    String val = loginPw.getEditText().getText().toString();

    if (val.isEmpty()) {
        loginName.setError("Field cannot be empty");
        return false;
    } else {
        loginName.setError(null);
        loginName.setErrorEnabled(false);
        return true;
    }

}

public void loginUser (View view) {
    if (!validateUsername() | !validatePassword()) {
        return;
    } else {
        isUser();
    }
}

private void isUser() {

    String userEnteredUsername = loginName.getEditText().getText().toString().trim();
    String userEnteredPassword = loginPw.getEditText().getText().toString().trim();

    reference = FirebaseDatabase.getInstance().getReference("Users");

    Query checkUser = reference.orderByChild("name").equalTo(userEnteredUsername);

    checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()){

                loginName.setError(null);
                loginName.setErrorEnabled(false);

                String passwordFromDb = snapshot.child(userEnteredUsername).child("password").getValue(String.class);
                if (passwordFromDb.equals(userEnteredPassword)){

                    loginName.setError(null);
                    loginName.setErrorEnabled(false);


                    Intent intent = new Intent(getApplicationContext(), HomeActivity.class);



                    startActivity(intent);
                } else {
                    loginPw.setError("Wrong Password");
                    loginPw.requestFocus();
                }
            } else {
                loginName.setError("No such user exists");
                loginName.requestFocus();
            }
        }

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

        }
    });

标签: javaandroidfirebasefirebase-realtime-database

解决方案


推荐阅读