Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Android在Firebase实时数据库中检索已认证用户的用户数据_Java_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Java 如何使用Android在Firebase实时数据库中检索已认证用户的用户数据

Java 如何使用Android在Firebase实时数据库中检索已认证用户的用户数据,java,android,firebase,firebase-realtime-database,firebase-authentication,Java,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在尝试从Firebase实时数据库检索当前登录用户的配置文件数据。我已经使用电子邮件和密码验证了我的用户。然后,我将注册数据保存在数据库中,作为一个对象,如下所示:所有这些代码都是在SignUpActivity中创建的。我将数据保存为用户对象。我的用户模型类有getter和setter、参数化构造函数和空白构造函数 ´´´´// Initialize FirebaseAuth and DatabaseReference mFirebaseAuth = FirebaseAuth.getInst

我正在尝试从Firebase实时数据库检索当前登录用户的配置文件数据。我已经使用电子邮件和密码验证了我的用户。然后,我将注册数据保存在数据库中,作为一个对象,如下所示:所有这些代码都是在SignUpActivity中创建的。我将数据保存为用户对象。我的用户模型类有getter和setter、参数化构造函数和空白构造函数

´´´´// Initialize FirebaseAuth and DatabaseReference
mFirebaseAuth = FirebaseAuth.getInstance();
mDatabaseRef = FirebaseDatabase.getInstance().getReference("users");

mFirebaseAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {

                    //save all data to database

                   String mUserId = mFirebaseAuth.getCurrentUser().getUid();

                        User user = new User(email, name,tel, address1,address2,user_type, mUserId);

                        //add to database
                        mDatabaseRef.child(mUserId).setValue(user);
//open main activity
Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
现在,为了在MainActivity中检索数据,我在onCreate中使用以下代码:

//instantiate firebaseAuth
mFirebaseAuth = FirebaseAuth.getInstance();
然后开始

userName = (TextView) findViewById(R.id.userNameHeader);

//check to see if user is logged in
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
    //the user is not logged in, start login activity
    loadLogInView();
} else {


    String mUserId = mFirebaseUser.getUid();

    root = FirebaseDatabase.getInstance().getReference();

    DatabaseReference mDatabaseRef = root.child("users").child(mUserId);

    ValueEventListener profileListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            userName.setText(user.getUserName());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.i("Read failed", databaseError.getMessage());
        }
    };
    mDatabaseRef.addValueEventListener(profileListener);


}
我试过调试,它说mUserId有一个空指针异常。因此,问题在于正确引用经过身份验证的用户的userId。请帮忙,我真的不明白我做错了什么

提前感谢。

尝试直接为数据库对象添加ValueEventListener,而不是稍后再进行设置。尝试检查是否已初始化FirebaseAuth


尝试此操作

在SignUpActivity中获取mUserId?能否添加您的异常日志?@prosper K。我可以在SignUpActivity中引用它,因为用户对象已成功保存在mUserId节点下。如果mUserId为null,则表示您未经身份验证,对吗?因此,请确保您在使用前已通过身份验证。
userName = (TextView) findViewById(R.id.userNameHeader);

//check to see if user is logged in
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
    //the user is not logged in, start login activity
    loadLogInView();
} else {


    String mUserId = mFirebaseUser.getUid();

    root = FirebaseDatabase.getInstance().getReference();

    DatabaseReference mDatabaseRef = root.child("users").child(mUserId);

    ValueEventListener profileListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            userName.setText(user.getUserName());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.i("Read failed", databaseError.getMessage());
        }
    };
    mDatabaseRef.addValueEventListener(profileListener);


}
        mAuth = FirebaseAuth.getInstance();
        mAuth.getCurrentUser();

        FirebaseUser mUser = mAuth.getCurrentUser();

        String uId = mUser.getUid();
        String personName=mUser.getDisplayName();
        String personEmail=mUser.getEmail();
        String personPhoto=mUser.getPhotoUrl();