从Firebase数据库android检索数据

时间:2019-11-22 14:33:57

标签: android firebase firebase-realtime-database

你好开发人员

我正在尝试从Firebase检索数据,但是将valueEventListener应用于数据后显示的是空数据,该值包含在User中 这是我在Firebase上的数据库

enter image description here

这是我的代码

班级用户

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

1 个答案:

答案 0 :(得分:1)

您收到该错误,因为您在引用中使用了错误的uid。使用以下代码行时:

rootRef.child(uid);

您正在传递给child(uid)方法,该方法来自身份验证过程。为了能够获取用户详细信息,您的用户对象的密钥应与该uid相匹配。不幸的是,在数据库中,您没有使用该ID,而是使用了push()方法生成的密钥,这是不正确的。您有两种选择,一种是删除该用户,然后使用正确的uid重新添加该用户,或者将上述代码行更改为:

rootRef.child("-LuIC ... _9cx");