Java从firebase数据库检索用户数据并存储在Android Studio中

Java从firebase数据库检索用户数据并存储在Android Studio中,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我在stackoverflow上到处查看,找不到我的问题。我试图从数据库中检索一个用户id,以显示除该用户之外的所有在线用户,但是除了id之外,所有数据库信息都被存储,导致以下崩溃 E/UncaughtException:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)” 位于USER.UsersFragment$1.onDataChange(Users

我在stackoverflow上到处查看,找不到我的问题。我试图从数据库中检索一个用户id,以显示除该用户之外的所有在线用户,但是除了id之外,所有数据库信息都被存储,导致以下崩溃

E/UncaughtException:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)” 位于USER.UsersFragment$1.onDataChange(UsersFragment.java:63)

这是我的用户文件

    public class User {
    private String id;
    private String username;
    private String first_name;
    private String last_name;
    private String birthday;
    private String email;
    private String imageURL;

    public User(String id, String username, String first_name, String last_name, String birthday, String email, String imageURL) {
        this.id = id;
        this.username = username;
        this.first_name = first_name;
        this.last_name = last_name;
        this.birthday = birthday;
        this.email = email;
        this.imageURL = imageURL;
    }

    public User() {

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}
下面是我如何将我的信息存储到变量中的,它崩溃的行被标记为崩溃

    final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("users");

        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mUsernames.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    User user = snapshot.getValue(User.class);
                    assert user != null;
                    if(!user.getId().equals(firebaseUser.getUid())) { <-CRASH
                        mUsernames.add(user);
                    }
                    //Log.println(Log.DEBUG, "", user.getId());
                }

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

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
final FirebaseUser FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference dbRef=FirebaseDatabase.getInstance().getReference(“用户”);
dbRef.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
mUsernames.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshot.getValue(User.class);
断言用户!=null;

如果(!user.getId().equals(firebaseUser.getUid()){您的数据库记录没有名为“id”的字段,这意味着getId()将始终返回null。数据根本不存在


您可能想使用快照的键,该键来自
snapshot.getKey()

问题在于,在数据库中,您有多条记录。但只有一条记录包含字段
id


因此,当从不包含节点id的节点检索数据时,它将返回一个错误。

请发布您的数据库结构user.getId为空编辑您希望发生什么与您观察到的情况不同?@PeterHaddad是的,我发现了,我只是不确定为什么它不被使用我不喜欢我测试过的所有其他变量,比如生日。我使用的用户在BlueFoot编辑下会显示:此外,我还将“id”切换为“user_id”,因为数据库在顶部,这也不起作用。我将给出快照。getKey().a请尝试并报告,谢谢。我如何像现在这样将密钥传递给User.class?调用setId()你想要的数据在那里?一切都很好,感谢你的快速帮助,我只是忘记了为旧帐户添加ID,而这些帐户不是在数据库中使用它们创建的。看起来每个记录的密钥中都有ID。你是说这些ID不是你想要的吗?修复它的步骤是什么?分离记录的ID?对于与
bluefoot
bluefoot
相同的每个用户,
id
都有一个
id
字段,您需要为
vileWolf
谋杀盐
添加一个
id
字段,对于节点
users
下的任何其他用户,我刚刚添加了id,它很有效,非常感谢。一个愚蠢的mis从我睡眠不足的头脑中解脱出来,现在我可以休息了。再次感谢你。