3

在我的应用程序中,用户需要先进行身份验证,然后才能开始使用该应用程序。我在 startupActivity 中有这段代码

private boolean checkAuthentication() {
    SharedPreferences sp = getSharedPreferences(
            "com.simekadam.blindassistant", Context.MODE_PRIVATE);
    return sp.getBoolean("logged", false);
}

private void processStartup(){
    Log.d(TAG, "processing startup");
    if (checkAuthentication()) {
        Intent startApp = new Intent(getApplicationContext(),
                BlindAssistantActivity.class);
        startActivity(startApp);
    } else {

        Intent loginIntent = new Intent(getApplicationContext(), LoginActivity.class);
        startActivity(loginIntent);


    }
}

它可以正常工作,但我需要在每个活动中(在 onStart 或 onResume 方法中)适当地检查它,但这会导致我所有活动中的代码重复。如何做到这一点的最佳方法是什么?我可以创建一个将与其他活动一起扩展的主活动吗?

谢谢

4

2 回答 2

8

是的,您可以创建一个主 Activity 并使用“扩展”从它继承,但是如果我是你,我会研究 AppState。

您可以创建一个扩展 Application 类的类。然后,您可以将其用于“全局”变量和状态。

看看这个网页: http ://www.helloandroid.com/tutorials/maintaining-global-application-state

于 2012-04-19T18:38:11.703 回答
0

我有时会做什么,我有我的默认 MainActivity,它总是在最初运行。

然后在 onCreate 我有一个检查来决定显示哪个屏幕:

boolean isLoggedIn = checkUserStatus();
Intent intent = isLoggedIn ? new Intent(context, HomeActivity.class) 
                           : new Intent(context, LoginActivity.class);
startActivity(intent);

checkUserStatus()是一个简单的函数,它获取一个布尔标志来确定用户是否登录:

protected boolean checkUserStatus(){
    boolean isLoggedIn ;
    Context context = getApplicationContext();
    SharedPreferences pref = context.getSharedPreferences("Session Data", MODE_PRIVATE);
    isLoggedIn = pref.getBoolean("isLoggedIn", false);
    return isLoggedIn ;
}

然后将 设置boolean为 true 或 false :

SharedPreferences pref = context.getSharedPreferences(
        "Session Data", MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("LAST_VERSION_CODE", BuildConfig.VERSION_CODE);
edit.putBoolean("isLoggedIn", true);// or false if you log out
edit.commit();
于 2015-08-20T20:05:49.687 回答