Android 检查每个活动的登录
我正在开发一个应用程序,用户在使用前必须登录。我定制了我的标题栏,并在那里放置了一个注销按钮,以便用户可以随时注销,并使用另一个帐户登录。然后应用程序应再次显示登录活动 这很好,但我的问题是后退按钮。当用户注销时,将显示登录活动,但如果他按back,应用程序将返回到上一页,使用户即使不登录也可以再次使用该活动 我将每个活动的Android 检查每个活动的登录,android,authentication,android-activity,login,titlebar,Android,Authentication,Android Activity,Login,Titlebar,我正在开发一个应用程序,用户在使用前必须登录。我定制了我的标题栏,并在那里放置了一个注销按钮,以便用户可以随时注销,并使用另一个帐户登录。然后应用程序应再次显示登录活动 这很好,但我的问题是后退按钮。当用户注销时,将显示登录活动,但如果他按back,应用程序将返回到上一页,使用户即使不登录也可以再次使用该活动 我将每个活动的onCreate()设置为: public void onCreate(Bundle savedInstanceState) { // Activity code
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()
添加到acitivityonResume()
中,因为在onCreate()
方法中选中它将导致仅在创建活动时调用一次登录检查
甚至击球手也要把球移到
onAttachToWindow()
因此,每次你的活动都会摆在最前面
onAttachToWindow()
将被调用并检查登录。您对SharedReferences所做的检查与我对getCurrentUser()所做的检查结果相同,因此存储登录状态是毫无意义的(我将解释这是错误的)。这是错误的,因为应用程序关闭后没有保存登录,所以我必须检查应用程序何时退出以将此首选项设置为false。但是将检查从onCreate移动到onStart解决了我的问题,为了获得更多性能,还应该在onResume()方法上添加布尔loggedIn测试,谢谢,这正是我需要的。实际上我把它移到了onResume,效果很好
onAttachToWindow()