从 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数据库获取数据到android应用程序时使用进度条