Android 检查每个活动的登录

Android 检查每个活动的登录,android,authentication,android-activity,login,titlebar,Android,Authentication,Android Activity,Login,Titlebar,我正在开发一个应用程序,用户在使用前必须登录。我定制了我的标题栏,并在那里放置了一个注销按钮,以便用户可以随时注销,并使用另一个帐户登录。然后应用程序应再次显示登录活动 这很好,但我的问题是后退按钮。当用户注销时,将显示登录活动,但如果他按back,应用程序将返回到上一页,使用户即使不登录也可以再次使用该活动 我将每个活动的onCreate()设置为: public void onCreate(Bundle savedInstanceState) { // Activity code

我正在开发一个应用程序,用户在使用前必须登录。我定制了我的标题栏,并在那里放置了一个注销按钮,以便用户可以随时注销,并使用另一个帐户登录。然后应用程序应再次显示登录活动

这很好,但我的问题是后退按钮。当用户注销时,将显示登录活动,但如果他按back,应用程序将返回到上一页,使用户即使不登录也可以再次使用该活动

我将每个活动的
onCreate()
设置为:

public void onCreate(Bundle savedInstanceState) {  
    // Activity code  
    checkLogin();  
}
以及
checkLogin()

然而,这并没有像它应该的那样工作,我的应用程序有时会在我按下back键时崩溃,有时它会像我说的那样返回到以前的活动,有时它确实工作

如何使
checkLogin()
在每次活动(重新)启动时都被调用?
还是有另一种更好的方法来做我想做的事

编辑:

根据@Gabriel的回答和中的下图,我将
checkLogin()
移动到
onResume()
方法,而不是
onCreate
,解决了我的问题


在用户登录的第一个活动中,尝试在SharedReference上保存一个变量,如下所示:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("logged", true); // set it to false when the user is logged out

      // Commit the edits!
      editor.commit();
然后在您的每个活动中,输入此代码以检查用户是否登录,如果用户未登录,请将其重定向到LoginActivity,如下所示:

@Override
    protected void onStart(Bundle state){
       super.onStart(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean loggedIn = settings.getBoolean("logged", true);
       if(!loggedIn){
            Toast.makeText(this,"you are not logged in !!",3000).show();
            Intent i = new Intent(this,LoginActivity.class);
            startActivity(i);
       }
    }

将对
checkLogin()
的调用从
onCreate()
移动到
onStart()

,我建议您将
checkLogin()
添加到acitivity
onResume()
中,因为在
onCreate()
方法中选中它将导致仅在创建活动时调用一次登录检查

甚至击球手也要把球移到

onAttachToWindow()

因此,每次你的活动都会摆在最前面
onAttachToWindow()
将被调用并检查登录。

您对SharedReferences所做的检查与我对getCurrentUser()所做的检查结果相同,因此存储登录状态是毫无意义的(我将解释这是错误的)。这是错误的,因为应用程序关闭后没有保存登录,所以我必须检查应用程序何时退出以将此首选项设置为false。但是将检查从onCreate移动到onStart解决了我的问题,为了获得更多性能,还应该在onResume()方法上添加布尔loggedIn测试,谢谢,这正是我需要的。实际上我把它移到了onResume,效果很好
onAttachToWindow()