因此,当我运行我的应用程序并登录时,当前用户的名称和电子邮件会显示在导航栏中,但是当我退出并与其他用户登录时,详细信息将与之前的用户保持一致,数据正在从数据库中检索,但在下一个用户登录时不会改变。
我尝试使用getUid
检查用户是否存在。但每当我在任何地方使用那段代码时,它都会给我一个空指针异常。我该如何解决这个问题?
非常感谢
代码如下:
public void pushToNavHeader(){
mRef = FirebaseDatabase.getInstance().getReference();
mRef.child("Users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View v = navigationView.getHeaderView(0);
TextView nName = (TextView) v.findViewById(R.id.textView4);
TextView nEmail = (TextView) v.findViewById(R.id.textView);
nName.setText("");
nEmail.setText("");
Users user = data.getValue(Users.class);
name = user.getName();
email = user.getEmail();
nName.setText(name);
nEmail.setText(email);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
{
"Users" :
{
"7wWFORCN8NMHoihSJeGs7pBWakt1" :
{
"email" : "ben@gmail.com",
"name" : "ben"
},
"FYcpquwFVfTrIPsXda82BSb2vpr1" :
{
"email" : "neesan@gmail.com",
"name" : "neesan"
}
}
}
用户类
public class Users {
private String name;
private String email;
private String password;
public Users(){
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
}
答案 0 :(得分:0)
假设您正在使用Firebase身份验证,检测登录用户已更改的正确方法是FirebaseAuth.AuthStateListener
,如" Listen for auth state"身份验证文档的部分:https://firebase.google.com/docs/auth/android/start/
文档显示应该有用的示例代码段,但是对于更完整的示例,请查看AnonymousAuthActivity.java。
倾听"用户"您的数据库部分只会在"用户"您的数据库部分已更新,当其他用户登录时,它不会帮助您更新应用程序。