2012-04-01 3 views
14

Я создаю проект, в котором у меня есть экран входа в систему, который используется для входа пользователя в приложение
. Этот экран входа в систему должен отображаться только в первый раз, поэтому пользователь может заполнить его и войти в систему, но когда пользователь открывает приложение во второй раз, приложение должно показать main.activity. Как использовать Shared preference.Как отображать экран входа только один раз?

Я не понимаю, как это сделать.

+0

Ссылка, которую вы пытались разделить с нами, была неправильной. Измените свой вопрос, чтобы добавить правильную ссылку. –

ответ

30

Для достижения этой цели с 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. 
} 

Надеется, что это помогает

EDIT: Чтобы запретить пользователь использовать кнопку назад, чтобы вернуться к деятельности Входа Вы должны finish() деятельности после начала нового.

После код взят из Forwarding.java | Android developers

// 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().

Смотрите также: Removing an activity from the history stack

+0

показывает ошибку на (Example.PREFS_NAME, 0); и мне нужно добавить этот код, в котором работает? –

+0

@sandiparmal, пожалуйста, внимательно прочитайте мой ответ, я указываю, где вам нужно вставить код. Класс 'Example' должен быть изменен в соответствии с классом, в котором вы создали статическую переменную' PREFS_NAME'. –

+1

все еще прыгает на логин даже после заполнения данных. могу ли я разместить код? –

1

SharedPreferences. Например, сохраните некоторое значение и прочитайте его в своей учетной записи.

В нашем проекте мы сохраняем токен и идентификатор пользователя. Итак, если пользователь уже вошел в систему, мы пропускаем авторизацию Activity.

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

+1

Где я храню это значение, означает, на какой активности? –

+0

http://developer.android.com/guide/topics/data/data-storage.html#pref –

1

Используйте 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() 

К ПолучитьЗначение из SharedPreference использовать ниже код ::

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() 
1

Вы должны добавить еще одну пустую деятельность (без пользовательского интерфейса), что нагрузки прежде всего.

Поместите логику, описанную @Telmo Marques в этой пустой деятельности, которая отвечает направлять пользователя либо к LoginScreen.Activity или Main.Activity

посмотреть здесь, ответ на @tozka How to Skip the first activity under a condition

0

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

Смежные вопросы