简体   繁体   English

从 firebase 获取用户时完全跳过 addOnCompleteListener

[英]addOnCompleteListener is completely skipped when getting user from firebase

I have the following in a login activity that gets triggered to sign in a user to my app:我在登录活动中具有以下内容,该活动被触发以将用户登录到我的应用程序:

   mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                ...
                LoggedInUser loggedInUser = LoggedInUser.getInstance();

                Toast.makeText(LoginActivity.this, getString(R.string.welcome_back) + loggedInUser.getUser().name, Toast.LENGTH_LONG).show();

The sign in and the listener above are successfully triggered.上面的登录和监听器都成功触发了。 However, I am having an issue occur on that Toast line where I call loggedInUser.getUser().name但是,我在调用loggedInUser.getUser().name的 Toast 行上出现问题

    public User getUser() {
    if (user == null) {
        FirebaseAuth mAuth = FirebaseAuth.getInstance();
        String userID = mAuth.getCurrentUser().getUid();
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(userID);

        databaseReference.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DataSnapshot> task) {
                if (!task.isSuccessful()) {
                    Log.e("firebase", "Error getting data", task.getException());
                }
                else {
                    User currUser = task.getResult().getValue(User.class);
                    user = currUser;
                }
            }
        });
    }

    return user;
}

What happens here is that databaseReference.get().addOnCompleteListener never gets triggered so user is never set, it returns null and the app crashes.这里发生的是databaseReference.get().addOnCompleteListener永远不会被触发,因此永远不会设置用户,它返回 null 并且应用程序崩溃。

I utilized the same code I have in getUser to set a user elsewhere with no issues so I am not sure what I am missing here that is causing the listener to be skipped.我使用 getUser 中的相同代码在其他地方设置用户没有问题,所以我不确定我在这里缺少什么导致侦听器被跳过。 I am new to firebase so any help to understand and fix this is appreciated!我是 firebase 的新手,因此感谢您对理解和解决此问题的任何帮助!

Not sure if I fully understand your code but you can get your user object from mAuth.getCurrentUser() inside signInWithEmailAndPassword .不确定我是否完全理解您的代码,但您可以从 signInWithEmailAndPassword 中的mAuth.getCurrentUser()获取您的用户signInWithEmailAndPassword

Refer to the docs .请参阅文档

Also bear in mind that calls to the Firebase database are asynchronous.还要记住,对 Firebase 数据库的调用是异步的。 So this means in your getUser() method, you'll probably get a null return when you enter the if == null block ie your addOnCompleteListener executes after your return user statement.所以这意味着在您的getUser()方法中,当您输入if == null块时,您可能会得到 null 返回,即您的addOnCompleteListener在您的return user语句之后执行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Firebase上使用.setPersistenceEnabled(true)时,真的需要.addOnCompleteListener吗? - It's really necessary .addOnCompleteListener when you're using .setPersistenceEnabled(true) on Firebase? 从 firebase 获取名称时,在 model_user 中获取 null - AndroidX - Getting null in model_user when getting name from firebase - AndroidX 从Firebase数据库有效获取用户数据 - Efficiently getting user data from Firebase Database 从Firebase读取用户数据时,为什么会出现Null指针异常? - Why am I getting a Null Pointer Exception when reading user data from Firebase? 如何在循环中获取 Firebase 的 .addOnCompleteListener() 方法? - How can I get .addOnCompleteListener() methods of Firebase inside a loop? 我在addOnCompleteListener()Auth Firebase中得到isReject()的原因是什么? - What the reason i get isReject() in addOnCompleteListener() Auth Firebase? 已跳过侦听器中的 Firebase 侦听器 - Firebase listener in listener skipped 使用drawString()java时会跳过Color.White - Color.White is getting skipped when using drawString() java 从 Firebase 实时数据库获取当前用户信息 - Getting the current User information from Firebase Realtime Database Java catch / finally块完全跳过了吗? - Java catch/finally blocks skipped completely?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM