You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Auth判断用户登录状态跳转Activity失效问题求助

问题分析与解决方案:Firebase用户登录状态判断失效

核心问题

你仅声明了FirebaseUser currentUser变量,但从未从Firebase Auth获取实际的当前用户实例,这个变量始终为null,导致判断逻辑一直走else分支,最终总是跳转到StartActivity。

修正方案

1. 初始化FirebaseAuth并获取当前用户

需要先获取FirebaseAuth的实例,再通过getCurrentUser()方法拿到登录状态对应的用户对象,修正后的完整代码如下:

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

/**
 * Loading screen activity
 */
public class SplashActivity extends AppCompatActivity {

    private FirebaseAuth mAuth;
    private FirebaseUser currentUser;

    Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        // 初始化FirebaseAuth实例
        mAuth = FirebaseAuth.getInstance();
        // 获取当前登录用户
        currentUser = mAuth.getCurrentUser();

        handler=new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if ( currentUser != null ) {
                    Intent intent=new Intent(SplashActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    Intent intent = new Intent(SplashActivity.this, StartActivity.class);
                    startActivity(intent);
                    finish();
                }
            }
        },3000);

    }
}

2. 进阶优化:使用Auth状态监听(可选)

如果App冷启动时Firebase的用户缓存还未加载完成,getCurrentUser()可能会暂时返回null。这种情况下,推荐使用Auth状态监听来确保拿到准确的登录状态:

// 替换原有的getCurrentUser逻辑,改用状态监听
mAuth = FirebaseAuth.getInstance();
mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        handler.postDelayed(() -> {
            if (user != null) {
                startActivity(new Intent(SplashActivity.this, MainActivity.class));
            } else {
                startActivity(new Intent(SplashActivity.this, StartActivity.class));
            }
            finish();
        }, 3000);
        // 仅监听一次,避免后续Auth状态变化重复触发跳转
        mAuth.removeAuthStateListener(this);
    }
});

内容的提问来源于stack exchange,提问作者user23130355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:12:47