Проверяйте логин на каждой активности - PullRequest
11 голосов
/ 23 ноября 2011

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

Это хорошо работает, но моя проблема с кнопкой возврата. Когда пользователь выходит из системы, активность входа отображается, но если он нажимает назад, приложение возвращается на предыдущую страницу, позволяя пользователю снова использовать эту активность, даже без входа в систему.

У меня есть 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() вызываться каждый раз, когда действие (пере) запускается?
Или есть другой, лучший способ сделать то, что я хочу?

EDIT:

Основываясь на ответе @ Gabriel и следующей диаграмме из SDK, ссылающейся на , я переместил checkLogin() в метод onResume() вместо onCreate, решая мою проблему.

Activity life cycle

Ответы [ 3 ]

5 голосов
/ 23 ноября 2011

Переместите вызов на checkLogin() с onCreate() на onStart().

5 голосов
/ 23 ноября 2011

Я предлагаю добавить checkLogin() к активности onResume(), так как проверка его в методе onCreate() вызовет проверку входа в систему 1 раз только при создании операции.

Или даже жидкое тесто, чтобы переместить его на

onAttachToWindow()

Так что каждый раз, когда ваша деятельность выходит на первый план. onAttachToWindow() будет вызван и проверит вход в систему.

4 голосов
/ 23 ноября 2011

В первом упражнении, в котором пользователь вошел в систему, попытайтесь сохранить переменную в ваших 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();

И затем в каждом вашем действии поместите этот код, чтобы проверить, вошел ли пользователь в систему или нет, если он не вошел в систему, поэтому перенаправьте его на 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);
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...