java - 来自 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) {
}
});
解决方案
推荐阅读
- python - 关于从 Tkinter 文本框小部件中检索文本的问题
- c# - EntityFramework AutoDetectChangesEnabled 已禁用并面临问题
- amazon-web-services - AWS S3 存储桶作为 Windows 驱动器
- javascript - 如何在 Angular 7 中传递身份验证标头
- javascript - Flowplayer:无法读取未定义的属性“播放”
- fusionauth - 不是原子类型“xs:ID”的有效值
- adfs2.0 - ADFS 中哪个身份验证策略更强?
- php - 在 PHP Mail 中使用自定义字体
- php - 替换文本并以逗号分隔添加到尾随数字字符
- javascript - 如何清除Materal ui的TextField