当前用户的DataSnapshot值为NULL

时间:2020-06-09 15:41:55

标签: java android firebase firebase-realtime-database firebase-authentication

我试图从Non Member节点获取当前用户的姓名和电话,但是由于某些原因,我总是将name和phone的值设置为NULL。我调试并追溯了它,发现当前用户的DataSnapshot的值为NULL。

代码:

 FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("NonMember");
        final FirebaseUser Key = firebaseAuth.getCurrentUser();
        final String userKey = Key.getUid();

        if(firebaseAuth.getCurrentUser() == null){
            finish();

            startActivity(new Intent(getApplicationContext(), MEMBERMAINActivity.class));
        }

        myRef.child(userKey).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot){
                for (DataSnapshot ds: dataSnapshot.getChildren()){
                   String name = dataSnapshot.child("name").getValue().toString();
                   Log.d("TAG", "Name"+ name);
                  // profile_name.setText(name);
                }}


            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(MyProfile.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();

            }
        });

enter image description here

2 个答案:

答案 0 :(得分:0)

您在数据库中“ NonMember”下拥有的密钥不是Firebase Auth用户ID。它们看起来像实时数据库推送ID,这意味着您可能已经在用户数据中添加了myRef.push().setValue(...)之类的内容。但是,您的代码正在尝试使用用户ID来查找用户数据。您从Firebase身份验证获得的ID与数据库中的数据不匹配。如果您的查询不匹配任何数据,那么它将在快照中获得空值。

如果要存储每个用户的数据,请不要使用实时数据库推送操作-使用用户的ID,例如myRef.child(userKey).setValue(...)

答案 1 :(得分:0)

[("2018 Q4",63150), ("2019 Q1",50900), ("2019 Q2",77550), ("2019 Q3",79600), ("2019 Q4",92550)]

尝试