首页 > 解决方案 > 插入了数据,但是当我读取数据时,它在 firebase android 上始终显示为空

问题描述

我已经更改了我的 firebase 项目,更改后它根本不起作用。我通过在各个方面更改代码做了很多工作,但没有运气,也找不到问题所在。

我搜索了很多并阅读了文章,但我不知道为什么更改项目后会出现错误。

每次显示无效的用户名时,即使我的代码也是完全正确的。我在我的另一个项目中使用此代码,它工作正常,但在这里它不能。当我添加数据时,它成功添加但检索出错。

我的代码


user = username.getText().toString();
pwd = password.getText().toString();
reference = FirebaseDatabase.getInstance().getReference().child("AdminUsers");

Query qry = reference.orderByChild("email").equalTo(user);

qry.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists())
        {
            for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
            {
                String cpwd = String.valueOf(dataSnapshot1.child("password").getValue());
                password.setText(cpwd);
                if (cpwd.equals(pwd))
                {
                    SharedPreferences pref = getSharedPreferences("login",MODE_PRIVATE);
                    SharedPreferences.Editor edit = pref.edit();
                    edit.putString("logged","true");
                    edit.putString("username",user);
                    edit.commit();
                    Toast.makeText(Login.this, "Login Successful", Toast.LENGTH_SHORT).show();
                    Intent home = new Intent(getApplicationContext(),MainActivity.class);
                    startActivity(home);
                    finish();
                }
                else
                {
                    pd.cancel();
                    Toast.makeText(getApplicationContext(),"Invalid Password "+cpwd,Toast.LENGTH_SHORT).show();
                }

            }
        }
        else
        {
            pd.cancel();
            Toast.makeText(Login.this, "Invalid Username", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        pd.cancel();
        Toast.makeText(Login.this, "Server Error", Toast.LENGTH_SHORT).show();
    }
});

Firebase 数据树图像

标签: androidfirebasefirebase-realtime-database

解决方案


您在 node AdminUsers,要同时获得passwordand email,您不必迭代,因此只需删除 for 循环:

for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren())

并使用:

dataSnapshot.child("password").getValue();

还要确保该user值实际存在于您的数据库中。这个查询reference.orderByChild("email").equalTo(user)就像说电子邮件在哪里等于 user_value


推荐阅读