从 Firebase RTD 获取数据时获取 null

Posted

技术标签:

【中文标题】从 Firebase RTD 获取数据时获取 null【英文标题】:Getting null while getting data from Firebase RTD 【发布时间】:2021-10-12 05:18:25 【问题描述】:

我正在开发一个可以登录/注册的简单应用。

一切正常,除了当我尝试从实时数据库上的“用户”路径获取数据时,即使我已经推送了我的数据,我的 UID 总是为空,这不是一个太复杂的部分,我可以正常获取数据与其他数据完全相同的类型?

这是我定义用户对象的部分:

public class User 

    String profile_picture_url , username , user_email, user_uid;

    public User()

    

    public User(String profile_picture_url , String userUID , String username,String user_email)
    
        this.profile_picture_url = profile_picture_url;
        this.user_uid = userUID;
        this.username = username;
        this.user_email = user_email;
    

    //GETTER
    public String getProfile_picture_url() 
        return profile_picture_url;
    

    public String getUsername() 
        return username;
    

    public String getUser_EMail() 
        return user_email;
    

    public String getUserUID() 
        return user_uid;
    

这是我在 Firebase 上的 json 树:

这是我检索数据的部分:

private void readUserFromFB() 
    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    Log.d("firebase_debug2",firebaseUser.getUid());
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
    reference.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) 
            userList.clear();
            for (DataSnapshot snapshot1 : snapshot.getChildren()) 
                User user = snapshot1.getValue(User.class);

                Log.d("firebase_debug2", " This is email " + user.getUser_EMail());
                Log.d("firebase_debug2","This is uid " + user.getUserUID());
                Log.d("firebase_debug2", "This is username " + user.getUsername());

              
                userAdapter = new UserAdapter(getContext(), userList);
                recyclerView.setAdapter(userAdapter);


            
        

        @Override
        public void onCancelled(@NonNull @NotNull DatabaseError error) 

        
    );


在 logcat 中获取:

This is email tas@gmail.com
This is uid null
This is username tas
This is email wwqw@gmail.com
This is uid null
This is username wiiwi

为什么我会遇到这个烦人的问题,希望有人能帮我找出答案,因为我尝试了几个小时但无法弄清楚我错过了哪里。谢谢

【问题讨论】:

【参考方案1】:

数据库的 JSON 中的属性称为 user_uid,但在您的 Java 代码中,您有:

public String getUserUID() 
    return user_uid;

Firebase 遵循 JavaBean 属性命名约定,因此属性 user_uid 的 getter 应该是:

public String getUser_uid() 
    return user_uid;

同样,setter 应该是 setUser_uid(String newUid),或者如果是公开的,那么字段应该是 user_uid

或者,您可以将 JSON 中的属性名称更改为 userUID,使其与您的代码匹配,或者使用注释明确告诉 Firebase 数据库中的属性名称:

@PropertyName("user_uid")
public String getUserUID() 
    return user_uid;

也可以看看:

Firebase @PropertyName doesn't work Firebase serialization names Make first letter of child name capital in Firebase Firebase @PropertyName doesn't work,以防您(或发现此问题的其他人)在 Kotlin 中遇到同样的问题。

【讨论】:

谢谢,它解决了问题,帮助我学到了新东西。

以上是关于从 Firebase RTD 获取数据时获取 null的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 获取数据时如何显示加载屏幕

从firebase获取数据时Recyclerview为空白

尝试从Firebase数据库获取时无法获取CarType

从firebase数据库获取数据到android应用程序时使用进度条

使用 Firebase 从不同的集合中获取数据,并在数据更改时更新 UI

防止在 Swift 中使用 .childAdded 从 Firebase 获取所有数据