2012-04-01 13 views
14

Ich erstelle ein Projekt, wo ich einen Login-Bildschirm habe, mit dem sich der Benutzer in die
Anwendung einloggen kann. Dieser Anmeldebildschirm sollte nur beim ersten Mal sichtbar sein, damit der Benutzer ihn ausfüllen und sich anmelden kann. Wenn der Benutzer die Anwendung jedoch zum zweiten Mal öffnet, muss die Anwendung main.activity anzeigen. Wie man Shared preference benutzt.Wie wird der Anmeldebildschirm nur einmal angezeigt?

Ich verstehe nicht, wie dies zu tun ist.

+0

Der Link, den Sie mit uns teilen wollten, war fehlerhaft. Bitte bearbeiten Sie Ihre Frage, um den richtigen Link hinzuzufügen. –

Antwort

30

Um dies zu erreichen mit SharedPreferences Sie könnte so etwas wie tun:

Fügen Sie folgende in jeder Klasse Sie mehr sehen, passen. Nehmen wir an, Sie fügen dies in die Klasse Example ein.

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

Nun in der Methode, die, wenn der Benutzer in erfolgreich anmeldet auswertet, gehen Sie wie folgt. Beachten Sie die Klasse Example, die Sie entsprechend Ihrem Code ändern müssen. Schließlich

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

, , wenn die Anwendung startet Sie jetzt auswerten kann, wenn der Benutzer bereits angemeldet ist oder nicht hat. Beachten Sie weiterhin die Klasse Example, die Sie ändern müssen.

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

this helps

EDIT: Um den Benutzer von der Nutzung der Zurück-Taste zu verhindern zur Login-Aktivität, die Sie finish() gehen zurück, um die Aktivität nach einem neuen zu starten.

folgender Code genommen von 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(); 

Also, was haben Sie in Ihrem Code zu tun ist, um die finish() Funktion auf der Login-Aktivität zu nennen, nach startActivity() Aufruf.

Siehe auch: Removing an activity from the history stack

+0

zeigt den Fehler an (Beispiel.PREFS_NAME, 0); und ich muss diesen Code in welcher Aktivität hinzufügen? –

+0

@sandiparmal Bitte lesen Sie meine Antwort sorgfältig, ich gebe an, wo Sie den Code einfügen müssen. Die Klasse 'Example' muss geändert werden, damit sie der Klasse entspricht, in der Sie die statische Variable' PREFS_NAME' erstellt haben. –

+1

noch springen auf Login auch nach dem Füllen der Daten. Kann ich den Code platzieren? –

1

Verwenden Sie SharedPreferences. Speichern Sie beispielsweise einen Wert und lesen Sie ihn in Ihrer Anmeldeaktivität.

In unserem Projekt speichern wir Token und Benutzer-ID. Wenn der Benutzer bereits angemeldet ist, überspringen wir die Autorisierungsaktivität.

P.S. Wenn Ihre Login-Aktivität die erste in Ihrer App ist, vergessen Sie nicht, sie zu beenden, bevor Sie eine andere Aktivität starten, um zu verhindern, dass Sie in anderen Aktivitäten die Taste "Zurück" drücken.

+1

wo ich diesen Wert speicher, auf welcher Aktivität? –

+0

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

1

Verwendung SharedPreferences. Zum Beispiel, haben Sie eine boolesche Variable, und lesen Sie es bei Ihrer Anwendung startet. In Ihrem Fall, wenn Benutzer die App zum ersten Mal startet, wird die Variable in der gemeinsamen Einstellung falsch sein, also starten Sie den Login-Bildschirm und nach erfolgreichem Login machen Sie diese boolesche Variable in der gemeinsamen Präferenz auf true, so dass der Benutzer den Wert im shared Präferenz wird wahr sein. Überspringen Sie also den Anmeldebildschirm und starten Sie Ihre Hauptaktivität.

Zum Speichern in SharedPreference Verwendung unter Code boolean ::

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

Um getValue von SharedPreference Code unten verwenden ::

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

Sie sollten eine weitere leere Aktivität hinzufügen (ohne UI), dass Lasten vor allem anderen.

die Logik von @Telmo Marques in diesem leeren Aktivität beschrieben Put, die den Benutzer direkt entweder an die LoginScreen.Activity oder Main.Activity

Antwort von @tozka hier verantwortlich ist

sehen How to Skip the first activity under a condition

0

Token ist auch eine gute Methode, um den Login-Status zu kennen.In Oauth-Token basierte Login, wenn der Benutzer sich an die Anwendung anmelden, erhalten sie ein Access-Token bei erfolgreicher Anmeldung und wird in Account-Manager auf sichere Weise gespeichert.Und danach Wann auch immer der Benutzer die Anwendung öffnet, prüfen Sie zunächst die Verfügbarkeit des Tokens und, falls verfügbar, Weiterleitung zur Hauptseite, ansonsten zur Anmeldeaktivität .

Verwandte Themen