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

はい、マスター アクティビティを作成し、「extends」を使用してそれを継承できますが、もし私があなたなら AppState を調べます。

Application クラスを拡張するクラスを作成できます。これを「グローバル」変数と状態に使用できます。

この Web ページをチェックしてください: 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 に答える