2012-04-01 22 views
14

Tworzę projekt, w którym mam ekran logowania, który służy do logowania użytkownika do aplikacji
. Ten ekran logowania powinien być widoczny tylko za pierwszym razem, aby użytkownik mógł go wypełnić i zalogować się, ale gdy użytkownik otworzy aplikację po raz drugi, aplikacja musi wyświetlić main.activity. Jak korzystać z Shared preference.Jak wyświetlić ekran logowania tylko jeden raz?

Nie rozumiem, jak to zrobić.

+0

Link, który próbowałeś nam udostępnić, był nieprawidłowy. Edytuj swoje pytanie, aby dodać poprawny link. –

Odpowiedz

30

Aby to osiągnąć SharedPreferences można zrobić coś takiego:

Wstaw następujący w dowolnej klasy widać bardziej pasuje. Załóżmy, że wstawiłeś to w klasie Example.

//Give your SharedPreferences file a name and save it to a static variable 
public static final String PREFS_NAME = "MyPrefsFile"; 

Teraz w metodzie, która ocenia, czy użytkownik loguje się powodzeniem, wykonaj następujące czynności. Zwróć uwagę na klasę Example, musisz to zmienić, aby pasowała do twojego kodu.

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

Wreszcie gdy aplikacja rozpoczyna można teraz ocenić, czy użytkownik jest już zalogowany lub nie. Wciąż zauważysz klasę Example, którą musisz zmienić.

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. 
} 

Nadzieja to pomaga

EDIT: Aby uniemożliwić użytkownikowi za pomocą przycisku Wstecz, aby wrócić do aktywności Logowanie trzeba finish() aktywność po uruchomieniu nowego.

następujący kod pochodzi z 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(); 

tak, co trzeba zrobić w kodzie jest wywołanie funkcji finish() na aktywność logowania, po wywołaniu startActivity().

Zobacz także: Removing an activity from the history stack

+0

wyświetla błąd (Przykład.PREFS_NAME, 0); i muszę dodać ten kod, w którym działaniu? –

+0

@sandiparmal przeczytaj uważnie moją odpowiedź, stwierdzam, gdzie trzeba wstawić kod. Klasa 'Example' musi zostać zmieniona tak, aby pasowała do klasy, w której utworzyłeś zmienną statyczną' PREFS_NAME'. –

+1

nadal przeskakuje po zalogowaniu, nawet po wypełnieniu danych. czy mogę umieścić kod? –

1

Użyj SharedPreferences. Na przykład zapisz pewną wartość i przeczytaj ją w swojej Aktywności logowania.

W naszym projekcie zapisujemy token i identyfikator użytkownika. Tak więc, jeśli użytkownik jest już zalogowany, pomijamy Aktywność autoryzacji.

P.S. Jeśli Twoja aktywność związana z logowaniem jest pierwszą w aplikacji, nie zapomnij jej ukończyć przed rozpoczęciem kolejnego działania, aby uniemożliwić naciśnięcie klawisza "Wstecz" w innych działaniach.

+1

gdzie przechowuję tę wartość oznacza, na którym działaniu? –

+0

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

1

Wpisz SharedPreferences. Na przykład, musisz mieć zmienną typu boolean i przeczytać ją podczas uruchamiania aplikacji. W przypadku, gdy użytkownik uruchamia aplikację po raz pierwszy, zmienna we współdzielonej preferencji będzie fałszywa, więc uruchom ekran logowania i po pomyślnym zalogowaniu się spraw, aby zmienna boolowska stała się prawdą we współdzielonej preferencji, tak, że gdy użytkownik przyjdzie sekundować wartość w udostępnionym preferencja będzie prawdą. więc pomiń ekran logowania i uruchom swoją główną aktywność.

Aby zapisać boolean w użyciu SharedPreference poniższym kodzie ::

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

Do getValue od SharedPreference skorzystać z poniższego kodu ::

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

należy dodać kolejną pustą aktywność (bez UI), który ładuje przed wszystkim.

Put logikę opisaną przez @Telmo Marques w tej pustej aktywności, który jest odpowiedzialny, aby skierować użytkownika albo do LoginScreen.Activity lub Main.Activity

zobaczyć tutaj, odpowiedź przez @tozka How to Skip the first activity under a condition

0

Użycie tokena jest również dobrą metodą poznania statusu logowania. W logowaniu opartym na tokenie Oauth, gdy użytkownik zaloguje się do aplikacji, otrzymają token dostępu po pomyślnym zalogowaniu się i zostaną zapisane w managerze konta w bezpieczny sposób. gdy kiedykolwiek użytkownik otworzy aplikację, najpierw sprawdź dostępność tokena i, jeśli to możliwe, przekieruj na stronę główną do działania logowania .

Powiązane problemy