Android .finish () работает до перезагрузки приложения

У меня есть несколько специфическая проблема, в которой я могу успешно finish () действие во время работы приложения. Это означает, что я могу перейти со страницы входа в MainActivity, и когда пользователь нажимает кнопку обратно, приложение закрывается после завершения входа в систему, но когда вы открываете приложение во второй раз, вы переходите на страницу входа вместо MainActivity. Есть какие-нибудь подсказки относительно того, почему это происходит?

 Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        LoginActivity.this.startActivity(intent);
        LoginActivity.this.finish();

Опубликуйте свои AndroidManifest.xml и LoginActivity.java. Но проблема, скорее всего, в том, что вы не проверяете (и / или сохраняете), вошел ли пользователь уже в систему, поэтому вы можете отправить его прямо на MainActivity.

Shark 11.07.2018 15:32

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

Syed Danish Haider 11.07.2018 15:37

Хорошо, у меня создалось впечатление, что finish () будет сохраняться даже после закрытия этого приложения. Поэтому я просто создам bool, если пользователь уже вошел в систему, и сразу перейду к main, если это так. Спасибо.

jfrizaba 11.07.2018 15:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно сохранить флаг о статусе входа, вероятно, в общих настройках и просто проверить этот флаг для перехода к MainActivity при запуске приложения.

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

Попробуйте этот код, чтобы проверить, вошел ли пользователь в систему или нет

sharedpreferences pref = getsharedpreferences("user",MODE_PRIVATE);
sharedpreferences.Editor editor = pref.edit();

Теперь, если пользователь успешно вошел в систему, добавьте это значение в общие настройки

editor.putBoolean("isLogin",true).apply();

И теперь в активности запуска просто проверьте, ложно ли оно, затем откройте намерение входа в систему или если true, то намерение MainActivity по этому коду

if (pref.getBoolean("isLogin",false)){
   Intent i = new Intent(LauncherActivity,MainActivity.class);
   startActivity(i);
}

Другие вопросы по теме