隐藏在用户详细信息中不会改变

时间:2017-01-17 16:35:46

标签: android firebase firebase-realtime-database firebase-authentication

因此,当我运行我的应用程序并登录时,当前用户的名称和电子邮件会显示在导航栏中,但是当我退出并与其他用户登录时,详细信息将与之前的用户保持一致,数据正在从数据库中检索,但在下一个用户登录时不会改变。

我尝试使用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) {
        }
    });

Firebase database

    {
  "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;
        }

    }

1 个答案:

答案 0 :(得分:0)

假设您正在使用Firebase身份验证,检测登录用户已更改的正确方法是FirebaseAuth.AuthStateListener,如" Listen for auth state"身份验证文档的部分:https://firebase.google.com/docs/auth/android/start/

文档显示应该有用的示例代码段,但是对于更完整的示例,请查看AnonymousAuthActivity.java

倾听"用户"您的数据库部分只会在"用户"您的数据库部分已更新,当其他用户登录时,它不会帮助您更新应用程序。