Java从firebase数据库检索用户数据并存储在Android Studio中
我在stackoverflow上到处查看,找不到我的问题。我试图从数据库中检索一个用户id,以显示除该用户之外的所有在线用户,但是除了id之外,所有数据库信息都被存储,导致以下崩溃 E/UncaughtException:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)” 位于USER.UsersFragment$1.onDataChange(UsersFragment.java:63) 这是我的用户文件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
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从我睡眠不足的头脑中解脱出来,现在我可以休息了。再次感谢你。