Java从Firebase数据库检索用户数据并将其存储在变量Android Studio中

时间:2019-10-01 10:38:19

标签: 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(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;
    }
}

这是我将信息存储到变量中的方式,崩溃的行标记为CRASH。

    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) {

            }
        });

2 个答案:

答案 0 :(得分:0)

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

您似乎可能要使用snapshot.getKey()中快照的密钥。

答案 1 :(得分:0)

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

因此,在检索数据时,它是从不包含节点id的节点中检索并返回错误。