无法在Android Studio中从Firebase实时数据库检索数据

3
我是一名新手,正在学习Firebase和Android Studio。我正在开发一个项目,需要获取当前用户的详细信息并显示姓名。即使我已经登录,它也会抛出“用户不存在”的提示。我在下面附上了所有内容。也许我做错了什么,请告诉我。 Firebase实时数据库截图: 获取当前用户详细信息的代码:
public class Succesfully_sign_up extends AppCompatActivity {

    DatabaseReference reff;
    TextView name;
    Button signout;
    FirebaseUser curr_user;
    String curr_user_str;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_succesfully_sign_up);
        name = findViewById(R.id.name);
         curr_user=FirebaseAuth.getInstance().getCurrentUser();
        if(curr_user!=null) 
       {
             curr_user_str = curr_user.getUid();
            reff = FirebaseDatabase.getInstance().getReference("userdetails");
            reff.child(curr_user_str).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    HelperClass data = dataSnapshot.getValue(HelperClass.class);
                    if (data != null) {
                        name.setText(data.getFullname_hc());
                    } else {
                        Toast.makeText(Succesfully_sign_up.this, "User does't exist", Toast.LENGTH_SHORT).show();
                    }

                }

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

                }
            });
        }
         else
            {
                startActivity(new Intent(Succesfully_sign_up.this,student_signup.class));
            }

    }
}

我的HelperClass
public class HelperClass {
    String fullname_hc,amizone_id_hc,mobile_num_hc,email_id_hc;
    public HelperClass()
    {

    }

    public HelperClass(String fullname_hc, String amizone_id_hc, String mobile_num_hc, String email_id_hc) {
        this.fullname_hc = fullname_hc;
        this.amizone_id_hc = amizone_id_hc;
        this.mobile_num_hc = mobile_num_hc;
        this.email_id_hc = email_id_hc;
    }

    public String getFullname_hc() {
        return fullname_hc;
    }

    public void setFullname_hc(String fullname_hc) {
        this.fullname_hc = fullname_hc;
    }

    public String getAmizone_id_hc() {
        return amizone_id_hc;
    }

    public void setAmizone_id_hc(String amizone_id_hc) {
        this.amizone_id_hc = amizone_id_hc;
    }

    public String getMobile_num_hc() {
        return mobile_num_hc;
    }

    public void setMobile_num_hc(String mobile_num_hc) {
        this.mobile_num_hc = mobile_num_hc;
    }

    public String getEmail_id_hc() {
        return email_id_hc;
    }

    public void setEmail_id_hc(String email_id_hc) {
        this.email_id_hc = email_id_hc;
    }


}
2个回答

2

我认为您手动创建了数据库,您的用户ID 8448.... 不是由Firebase Android生成的,因此会显示该错误。如果不是这样,请分享上述数据库结构的创建代码。


是的,那就是问题所在!我通过将数据库的主键设置为Uid来解决了它。但是,为什么当我将主键设置为电话号码时,getUid()不会返回主键呢?我以为它会返回我设置的任何主键。 - LetsBhonest
getUid()将始终返回由Firebase身份验证系统创建的ID,无论该ID是否用作主键,因此getUid()永远不会返回您手动创建的主键。如果您有任何疑问,请告诉我。谢谢。 - Rushikesh Gaikwad
如果您对我的回答感到满意,请点赞。谢谢。 - Rushikesh Gaikwad

2
如何循环遍历子元素并访问数据:
//the reference
reff = FirebaseDatabase.getInstance().getReference("userdetails");


//the reading

 reff.child.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

 //loop through every possible child under "userdetails"
for(DataSnapshot ds : dataSnapshot.getChildren()){

String fullName = ds.child("fullname_hc").getValue(String.class);
name.setText(fullName);

}



}

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

}
});

谢谢!但是我通过将数据库的主键设置为Uid来解决了这个问题。但是,为什么当我将主键设置为电话号码时,getUid()不返回主键呢?我以为它会返回我设置的任何主键。 - LetsBhonest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接