尝试从Firebase检索数据但获取null

时间:2019-10-20 06:47:30

标签: java android firebase firebase-realtime-database

我正在尝试从我的Firebase数据库检索数据并在文本字段中打印一条语句,但是我一直得到空值。我正在使用userid尝试到达所需的子节点。我的文本字段一直在说“欢迎将null登录为null” My Firebase Database

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        final String uid;
        FirebaseUser user;


        user = FirebaseAuth.getInstance().getCurrentUser();
        uid = user.getUid();

        DatabaseReference reference = 
      FirebaseDatabase.getInstance().getReference("User");


         reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                fName = dataSnapshot.child(uid).child("fName").getValue(String.class);
                role = dataSnapshot.child(uid).child("role").getValue(String.class);

            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        welcomeText = (TextView) findViewById(R.id.welcomeText);
        welcomeText.setText("Welcome " + fName + "! You are logged-in as " + role);

2 个答案:

答案 0 :(得分:1)

将以下行移动到onDataChange()回调方法。

welcomeText = (TextView) findViewById(R.id.welcomeText);
welcomeText.setText("Welcome " + fName + "! You are logged-in as " + role);

答案 1 :(得分:1)

您应该以{{1​​}}作为孩子,仅获取登录用户的数据。当前,您遍历所有用户,最后给您错误的数据。 尝试如下:

userid

代替

DatabaseReference reference = 
      FirebaseDatabase.getInstance().getReference("User").child(uid);

此外,当前您正在设置DatabaseReference reference = FirebaseDatabase.getInstance().getReference("User"); fName的初始值为空,并且永远不会使用在role中获得的用户详细信息来更新该值。因此,请在onDataChange中更新您的TextView

onDataChange