你好开发人员
我正在尝试从Firebase检索数据,但是将valueEventListener
应用于数据后显示的是空数据,该值包含在User
中
这是我在Firebase上的数据库
这是我的代码
班级用户
public class User {
public String id, fname,lname, side, email, phone;
public User(){ }
public User(String id,String fname,String lname,String side, String email, String phone) {
this.id=id;
this.fname = fname;
this.lname = lname;
this.side = side;
this.email = email;
this.phone = phone;
}
public String getFname() {
return fname;
}
public String getLname() {
return lname;
}
public String getSide() {
return side;
}
public String getEmail() {
return email;
}
public String getPhone() {
return phone;
}
public String getId() {
return id;
}
我的valueEventListener
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("users_client");
DatabaseReference userNameRef = rootRef.child(uid);
userNameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
userinfo=dataSnapshot.getValue(User.class);
Toast.makeText(Login.this,userinfo.getFname(),Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
错误:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.xxxx.gestient.User.getFname()' on a null object reference
答案 0 :(得分:1)
您收到该错误,因为您在引用中使用了错误的uid
。使用以下代码行时:
rootRef.child(uid);
您正在传递给child(uid)
方法,该方法来自身份验证过程。为了能够获取用户详细信息,您的用户对象的密钥应与该uid
相匹配。不幸的是,在数据库中,您没有使用该ID,而是使用了push()
方法生成的密钥,这是不正确的。您有两种选择,一种是删除该用户,然后使用正确的uid
重新添加该用户,或者将上述代码行更改为:
rootRef.child("-LuIC ... _9cx");