Как отображать экран входа только один раз?
Я создаю проект, в котором у меня есть экран входа в систему, который используется для входа пользователя в систему
Заявка. Этот экран входа в систему должен отображаться только в первый раз, поэтому пользователь может заполнить его и войти в систему, но когда пользователь открывает приложение во второй раз, приложение должно показать main.activity. Как использовать Общие предпочтения.
Я не понимаю, как это сделать.
Ответы
Ответ 1
Чтобы достичь этого с помощью SharedPreferences
, вы можете сделать что-то вроде этого:
Вставьте следующее в любой класс, который вам больше подходит. Предположим, вы вставляете это в класс Example
.
//Give your SharedPreferences file a name and save it to a static variable
public static final String PREFS_NAME = "MyPrefsFile";
Теперь в методе, который оценивает, успешно ли пользователь выполнил вход в, выполните следующие действия. Обратите внимание на класс Example
, вы должны изменить его, чтобы он соответствовал вашему коду.
//User has successfully logged in, save this information
// We need an Editor object to make preference changes.
SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0); // 0 - for private mode
SharedPreferences.Editor editor = settings.edit();
//Set "hasLoggedIn" to true
editor.putBoolean("hasLoggedIn", true);
// Commit the edits!
editor.commit();
Наконец, , когда ваше приложение запустится, вы можете оценить, был ли пользователь уже зарегистрирован или нет. Обратите внимание на класс Example
, который вы должны изменить.
SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0);
//Get "hasLoggedIn" value. If the value doesn't exist yet false is returned
boolean hasLoggedIn = settings.getBoolean("hasLoggedIn", false);
if(hasLoggedIn)
{
//Go directly to main activity.
}
Надеюсь, что это поможет
РЕДАКТИРОВАТЬ: Чтобы пользователь не мог использовать кнопку "Назад", чтобы вернуться к активности входа, вы должны finish()
активировать действие после запуска нового.
Следующий код, взятый из Forwarding.java | Разработчики Android
// Here we start the next activity, and then call finish()
// so that our own will stop running and be removed from the
// history stack
Intent intent = new Intent();
intent.setClass(Forwarding.this, ForwardTarget.class);
startActivity(intent);
Example.this.finish();
Итак, что вы должны сделать в своем коде - вызвать функцию finish()
в активности входа, после вызова startActivity()
.
См. также: Удаление активности из стека истории
Ответ 2
Используйте SharedPreferences
. Например, сохраните некоторое значение и прочитайте его в своей учетной записи.
В нашем проекте мы сохраняем токен и идентификатор пользователя. Итак, если пользователь уже вошел в систему, мы пропустим действие авторизации.
P.S. Если ваша учетная запись является первой в вашем приложении, не забудьте завершить ее, прежде чем запускать другое действие, чтобы не нажимать клавишу "Назад" в других действиях.
Ответ 3
Используйте SharedPreferences. Например, булевая переменная и прочитайте ее при запуске приложения.
В вашем случае, когда пользователь запускает приложение в первый раз, переменная в общей предпочтения будет ложной, поэтому запустите экран входа в систему и после успешного входа сделайте эту логическую переменную равной true в общих предпочтениях, так что, когда пользователь приходит в секундах, значение в общих предпочтениях будет правдой. поэтому пропустите экран входа в систему и запустите основное действие.
Чтобы сохранить логическое значение в SharedPreference, используйте код:
public static void saveBooleanInSP(Context _context, boolean value){
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("ISLOGGEDIN", value);
editor.commit();
}//savePWDInSP()
Чтобы getValue из SharedPreference используется ниже code::
public static boolean getBooleanFromSP(Context _context) {
// TODO Auto-generated method stub
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean("ISLOGGEDIN", false);
}//getPWDFromSP()
Ответ 4
Вы должны добавить еще одну пустую операцию (без интерфейса), которая загружается раньше всего.
Поместите логику, описанную @Telmo Marques, в эту пустую операцию, которая отвечает за направление пользователя либо в LoginScreen.Activity, либо в Main.Activity
см. здесь, ответ @tozka
Как пропустить первое действие при условии
Ответ 5
Использование токена - также хороший способ узнать статус входа. В качестве входа в лог файл на основе Oauth при входе пользователя в приложение они возвращают токен доступа при успешном входе в систему и сохраняются в менеджере учетных записей в защищенном виде. И там после того, как когда-либо пользователь откроет приложение, сначала проверьте наличие токена и, если он будет перенаправлен на главную страницу, еще на активность входа.