web-dev-qa-db-ja.com

Androidログインアクティビティとホームアクティビティのリダイレクト

アプリケーションで共有設定を使用してセッションを管理しています。ユーザーがログインしている場合はホームアクティビティを表示する必要があり、そうでない場合はログインアクティビティを表示する必要があります。

http://www.androidhive.info/2012/08/Android-session-management-using-shared-preferences/ の助けを借りて

ユーザーがログインしていない場合は、ホームを作成してログインアクティビティにリダイレクトしようとしました。

これは正しいですか?それとももっと良い解決策はありますか?.

ありがとう、ベネット。

14
Bennet

ユーザーをログインするときにImが行うことは次のとおりです。

     private static final String APP_SHARED_PREFS = "asdasd_preferences";
     SharedPreferences sharedPrefs;
     Editor editor;
     private boolean isUserLoggedIn;

    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    editor = sharedPrefs.edit();
    editor.putBoolean("userLoggedInState", true);
    editor.putInt("currentLoggedInUserId", userId);
    editor.commit();

    Intent signupSuccessHome = new Intent(this, Home.class);
    signupSuccessHome.putExtra("reqFrom", "login");
    startActivity(signupSuccessHome);
    finish();

すべてのアクティビティが拡張する基本アクティビティ(アクションバーとスライドメニューが含まれています)では、次のチェックがあります:(メインアクティビティはログイン/登録画面です。ユーザーがログインしていない場合は、そこに送信します)

@Override
protected void onResume() {
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }
    super.onResume();
}

@Override
protected void onRestart() {
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }
    super.onRestart();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE);
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    currentlyLoggedInUser = sharedPrefs.getInt("currentLoggedInUserId", 0);
    currentlyLoggedInUserString = Integer.toString(currentlyLoggedInUser);
    if (!isUserLoggedIn) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }

ユーザーがログイン画面に戻らないようにするには:Login.Javaの場合:

    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false);
    if (isUserLoggedIn) {
        Intent intent = new Intent(this, Home.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }

home.Javaの場合:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, Home.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
    super.onBackPressed();
}
10
J. K.

私の経験では、ログインページ/ホームページのリダイレクトにも共有設定を使用しています。唯一の違いは、私の最初のページは、特定の期間表示するスプラッシュ画面です。その後、共有設定でログイン状態を確認し、必要なリダイレクトを行います。

ただし、一部のサーバーでは、特定の期間(ログイン応答の一部としてサーバーから送信される構成可能な値)が経過した後に、新しいログイン要求を送信する必要があることに注意してください。だからあなたはそれを見てみたいかもしれません。別のアプリでは、アプリを起動するたびにログインリクエストを送信する必要があるため、最初のログイン後に共有設定にログイン値(userName/Pass)を保存し、ログイン部分をサイレントに実行します(スプラッシュ画面の後にログイン画面を表示)。したがって、それはすべてあなたの要件に依存します。しかし、私のすべてのアプリで、共有設定のみを使用しました。

たぶん他の誰かがより良いアプローチを提案することができます。

0
Rajeev