Ответ 1
Переместите вызов на checkLogin()
от onCreate()
до onStart()
.
Я разрабатываю приложение и приложение, где пользователь должен войти в систему перед его использованием. Я настроил свой заголовок и разместил там кнопку выхода, чтобы пользователи могли выйти из системы, когда захотят, и войти в систему с другой учетной записью. Затем приложение должно снова отобразить активность входа.
Это хорошо работает, но моя проблема связана с кнопкой "Назад". Когда пользователь выходит из системы, активность входа в систему отображается, но если он нажимает назад, приложение возвращается на предыдущую страницу, что позволяет пользователю снова использовать эту активность даже без входа.
У меня есть 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()
каждый раз, когда действие (re) запускается?
Или есть другой, лучший способ сделать то, что я хочу?
EDIT:
На основе ответа @Gabriel и следующей диаграммы из ссылок SDK, я переместил checkLogin()
в метод onResume()
вместо onCreate
, решая мою проблему.
Переместите вызов на checkLogin()
от onCreate()
до onStart()
.
Я предлагаю вам добавить checkLogin()
в acтивность onResume()
, поскольку проверка его в методе onCreate()
приведет к вызову проверки входа в систему 1 раз только при создании активности.
Или даже тесто должно переместить его на
onAttachToWindow()
Итак, каждый раз, когда ваша деятельность выйдет на фронт. onAttachToWindow()
будет вызываться и будет проверяться для входа.
В fisrt Activity, где пользователь вошел в систему, попробуйте сохранить переменную в своих 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);
}
}