gpt4 book ai didi

java - Android 和 Firebase 将 EditText 与实时数据库子值进行比较

转载 作者:行者123 更新时间:2023-12-01 18:56:33 25 4
gpt4 key购买 nike

此问题已在以下位置提出:Comparing EditText string with firebase database's child value我用它作为指导,但遇到了那里没有解决的问题。我知道 Firebase 提供身份验证选项,但我目前需要使用实时。我希望将用户名和密码 EditTexts 中输入的 2 个值与实时数据库“Users”中的子值进行比较。

当我运行我的代码时,我得到一个

Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

我假设用户名 1 和/或密码 1 中的一个/两个都为空,这就是我的代码无法运行的原因。

logUsername = findViewById(R.id.etLoginUsers);
logPassword = findViewById(R.id.etLoginPassword);

FirebaseApp.initializeApp(this);
final DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users");

btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

final String username = logUsername.getText().toString().trim();
final String password = logPassword.getText().toString().trim();
mDatabaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username1 = dataSnapshot.child("username").getValue().toString();
String password1 = dataSnapshot.child("password").getValue().toString();

if (username.equals(username1) & password.equals(password1)){
Intent intSignIn = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intSignIn);
} else {
Toast.makeText(MainActivity.this, "Incorrect Login Details", Toast.LENGTH_SHORT).show();
}
}

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

}
});

。我将读取和写入规则都设置为 true。我是编码新手,因此我们将不胜感激。非常感谢!

最佳答案

关键在于这段代码:

final DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users");
mDatabaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username1 = dataSnapshot.child("username").getValue().toString();
String password1 = dataSnapshot.child("password").getValue().toString();

由于您是从 /Users 加载,因此 dataSnapshot 包含所有用户的数据。每个用户的用户名密码都位于dataSnapshot下的子节点中,您的代码需要处理这些子节点。

从当前代码中执行此操作的最简单方法是:

final DatabaseReference mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Users");
mDatabaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
String username1 = userSnapshot.child("username").getValue(String.class);
String password1 = dataSnapshot.child("password").getValue(String.class);
}

这里最大的区别是:

  • 我循环访问数据快照的子节点以获取每个用户的快照。
  • 我使用 getValue(String.class),它仅在 username 存在时返回一个值。

关于java - Android 和 Firebase 将 EditText 与实时数据库子值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59669356/

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