Как отображать экран входа только один раз?

Я создаю проект, в котором у меня есть экран входа в систему, который используется для входа пользователя в систему Заявка. Этот экран входа в систему должен отображаться только в первый раз, поэтому пользователь может заполнить его и войти в систему, но когда пользователь открывает приложение во второй раз, приложение должно показать 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 при входе пользователя в приложение они возвращают токен доступа при успешном входе в систему и сохраняются в менеджере учетных записей в защищенном виде. И там после того, как когда-либо пользователь откроет приложение, сначала проверьте наличие токена и, если он будет перенаправлен на главную страницу, еще на активность входа.