2013-07-29 17 views
14

Ich verwalte die Sitzung mit gemeinsamen Präferenzen in meiner Anwendung. Wenn der Benutzer angemeldet ist, muss er die Home-Aktivität anzeigen, andernfalls muss er die Login-Aktivität anzeigen.Android-Login Aktivität und Home-Aktivität Umleitung

Mit Hilfe von http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

Ich habe versucht, nach Hause zu schaffen und leiten Aktivität um sich einzuloggen, wenn der Benutzer nicht angemeldet ist.

Ist das richtig ?, oder gibt es eine bessere Lösung.

Danke, Bennet.

+0

Wenn Ihre Anwendung speichert nur 1 Benutzername und Passwort, dann Ihre Methode perfekt ist, es keine Notwendigkeit zu ändern. Wenn Sie jedoch mehrere Benutzer haben, wird empfohlen, die SQLite-Datenbank zu verwenden. –

+1

Hi Stealz, die tatsächlichen Anmeldeinformationen sind in Remote-Server überprüft. nicht im Handy. shared preference wird verwendet, um nur eine Benutzerinformation zu speichern. – Bennet

Antwort

0

Soweit mir bekannt ist, verwende ich auch die gemeinsamen Einstellungen für die Anmeldeseite/Startseite-Umleitung. Der einzige Unterschied ist, dass meine erste Seite ein Begrüßungsbildschirm ist, den ich für eine bestimmte Zeit zeige. Danach überprüfe ich den angemeldeten Status mit den freigegebenen Einstellungen und führe die notwendige Umleitung durch.

Ein Punkt sollte hier beachtet werden, einige Server erfordern jedoch, dass Sie eine neue Anmeldeanforderung nach einer bestimmten Dauer (konfigurierbarer Wert, der vom Server als Teil der Anmeldeantwort gesendet wurde) gesendet haben. Vielleicht möchtest du dir das mal ansehen. In einer anderen meiner Apps muss ich bei jedem Start der App eine Login-Anfrage senden. Ich speichere einfach die Login-Werte (userName/Pass) in den freigegebenen Einstellungen nach der ersten Anmeldung und führe den Login-Teil automatisch aus (ohne zeigt den Anmeldebildschirm) nach dem Startbildschirm. Es hängt also von Ihren Anforderungen ab. Aber in all meinen Apps habe ich nur gemeinsame Einstellungen verwendet.

Vielleicht kann jemand anderes einen besseren Ansatz vorschlagen. Hier

+0

Danke, das scheint eine gute Idee zu sein. Aber, mein Fall, ich mag Facebook Login in Android. absolut das gleiche. – Bennet

9

ist, was Im tun bei der Anmeldung des Benutzers in:

 private static final String APP_SHARED_PREFS = "asdasd_preferences"; 
    SharedPreferences sharedPrefs; 
    Editor editor; 
    private boolean isUserLoggedIn; 

    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    editor = sharedPrefs.edit(); 
    editor.putBoolean("userLoggedInState", true); 
    editor.putInt("currentLoggedInUserId", userId); 
    editor.commit(); 

    Intent signupSuccessHome = new Intent(this, Home.class); 
    signupSuccessHome.putExtra("reqFrom", "login"); 
    startActivity(signupSuccessHome); 
    finish(); 

in der Basisaktivität, die alle meine Aktivitäten erweitern (es die ActionBar enthält und das Schiebe-Menü) Ich habe die folgende Kontrolle: (mainactivity ist mein Login/registrieren Bildschirm, wenn der Benutzer in im nicht angemeldet ist sie dort) zu senden

@Override 
protected void onResume() { 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 
    super.onResume(); 
} 

@Override 
protected void onRestart() { 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 
    super.onRestart(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    currentlyLoggedInUser = sharedPrefs.getInt("currentLoggedInUserId", 0); 
    currentlyLoggedInUserString = Integer.toString(currentlyLoggedInUser); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 

und den Benutzer zu verhindern, zum Login-Bildschirm aus geht zurück. in Login.java:

isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (isUserLoggedIn) { 
     Intent intent = new Intent(this, Home.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 

in Home.java:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(this, Home.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
    finish(); 
    super.onBackPressed(); 
} 
+2

Haben Sie Ihre Login-Aktivität als Startprogramm festgelegt? –