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
相关产品推荐
相关产品推荐

