检查每个活动的登录情况

时间:2011-11-23 18:02:45

标签: android authentication android-activity login titlebar

我正在开发和应用,用户必须先登录才能使用它。我自定义了标题栏并在其中放置了一个注销按钮,以便用户可以随时注销,并使用其他帐户登录。然后应用程序应再次显示登录活动。

效果很好,但我的问题在于后退按钮。当用户注销时,登录活动显示,但如果他按下,则应用程序返回上一页,使用户能够再次使用该活动,即使没有登录也是如此。

我通过这种方式设置了onCreate()所有活动:

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

checkLogin()

if (GlobalContext.getCurrentUser() == null) {
    Intent i = new Intent(this, LoginActivity.class);
    startActivityForResult(i, GlobalContext.REQUEST_LOGIN);
}

然而,这不应该像它应该的那样工作,我的应用程序有时会在我按下时崩溃,有时会像我说的那样返回到之前的活动,有时它确实有效。

每次活动(重新)开始时,如何调用checkLogin()? 或者还有另一种更好的方法来做我想做的事情?

编辑:

根据@ Gabriel的回答和the SDK references中的以下图表,我将checkLogin()移至onResume()方法而不是onCreate,解决了我的问题。

Activity life cycle

3 个答案:

答案 0 :(得分:5)

将来自checkLogin()的{​​{1}}移至onCreate()

答案 1 :(得分:5)

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

甚至击球就是把它移到

onAttachToWindow()

所以每次你的活动都会出现在前面。将调用onAttachToWindow()并检查登录信息。

答案 2 :(得分:4)

在用户登录的fisrt活动中,尝试在SharedPreferences上保存变量,如下所示:

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();

然后在你的每个Activity中,设置此代码以检查用户是否已登录,如果他没有登录,那么将他重定向到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);
       }
    }