Активность входа в Android и перенаправление на главную страницу

Я управляю сеансом, используя общие предпочтения в своем приложении. Если пользователь вошел в систему, он должен показать домашнюю активность, если он не должен показывать активность входа.

С помощью http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

Я попытался создать домашнюю страницу и перенаправить на активность входа, если пользователь не вошел в систему.

Правильно ли это?, или есть лучшее решение.

Спасибо, Беннет.

Ответ 1

Вот что я делаю при регистрации пользователя в:

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

в базовом действии, что все мои действия расширяются (он содержит панель действий и скользящее меню) У меня есть следующая проверка: (mainactivity - это мой экран входа/регистрации, если пользователь не выполнил вход в систему, отправив их там)

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

Ответ 2

Что касается моего опыта, я также использую общие настройки для перенаправления страницы входа/домашней страницы. Единственная разница в том, что моя первая страница - это заставка, которую я показываю в течение определенного времени. После этого я проверяю состояние входа в систему с помощью общих настроек и выполняю необходимое перенаправление.

Следует отметить здесь одну точку, хотя на некоторых серверах требуется отправить новый запрос на вход через определенную продолжительность (конфигурируемое значение, отправленное с сервера как часть ответа на вход). Поэтому вы можете взглянуть на это. В другом одном из моих приложений мне нужно отправить запрос на вход при каждом запуске приложения, поэтому я просто сохраняю значения входа (имя_пользователя/пароль) в общих префайлах после первого входа в систему и молча выполняю учетную запись (без показывая экран входа в систему) после заставки. Так что все зависит от ваших требований. Но во всех моих приложениях я использовал только общие привилегии.

Возможно, кто-то другой может предложить лучший подход.