我在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) {
}
});
答案 0 :(得分:0)
您的数据库记录没有名为“ id”的字段,这意味着getId()始终将返回null。数据根本不存在。
您似乎可能要使用snapshot.getKey()
中快照的密钥。
答案 1 :(得分:0)
问题是在数据库中,您有多个记录。但是只有一个记录包含字段id
。
因此,在检索数据时,它是从不包含节点id
的节点中检索并返回错误。