java - 在用户等待来自 FirebaseAuth 的身份验证时显示 SplashScreen

标签 java android firebase-authentication

我正在尝试在我的应用程序上显示一个启动画面,我已经设法使用 Handler 和一个构建 Intent 的 Runnable 对象来完成它,并在 2 秒后使用构建的 Intent 将 Activity 更改为我的登录 Activity

但是,现在我已经设置了 Firebase 身份验证。我试图构建与预期行为相匹配的 Intent :
(用户登录 --> 显示 SplashScreen --> 跳过 LoginActivity)
(用户 notSignedIn --> 显示 SplashScreen --> 显示 LoginActivity)
这是我目前正在处理的代码:

public class SplashScreenActivity extends AppCompatActivity {


    private FirebaseAuth mAuth = null;
    private FirebaseAuth.AuthStateListener mAuthListener;

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_splash_screen);

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                mAuth = FirebaseAuth.getInstance();
                mAuthListener = new FirebaseAuth.AuthStateListener() {
                    @Override
                    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                        FirebaseUser user = firebaseAuth.getCurrentUser();
                        if (user != null) {
                            // User is signed in, send to mainmenu
                            Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                            startActivity(new Intent(SplashScreenActivity.this, MainMenuActivity.class));
                        } else {
                            // User is signed out, send to register/login
                            startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
                        }
                    }
                };
            }
        }, SPLASH_DISPLAY_LENGTH);

    }
}

我省略了导入以缩短代码。问题是该应用程序不确定地停留在启动画面中。

最佳答案

问题是您使用的是 AuthStateListener。您实际上只需要在不使用 AuthStateListener 的情况下执行以下操作:

             FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in, send to mainmenu
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                    startActivity(new Intent(SplashScreenActivity.this, MainMenuActivity.class));
                } else {
                    // User is signed out, send to register/login
                    startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
                }

关于java - 在用户等待来自 FirebaseAuth 的身份验证时显示 SplashScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829890/

相关文章:

android - 有什么方法可以在同一个 android 手机上安装我的应用程序的调试版本和我的应用程序的 google play 商店版本?

android - zza.zza FirebaseAuthFallbackService 泄漏

Firebase session 长度新控制台

java - 如何sqlite + listview + onListItemClick启动新的Activity?光标读取错误

java - 在java中从html表获取信息时遇到问题

java - Spring复制属性如何工作?

android - 使用动态数据解析非常大的 JSON 文件

java - 如何在 Android 10 中以编程方式设置自定义主题属性

ios - 在 Firebase 中创建用户后立即发送验证邮件

java - Python 验证 API