2013-07-29 11 views
14

Sto gestendo la sessione utilizzando le preferenze condivise nella mia applicazione. Se l'utente è loggato deve mostrare l'attività di casa, altrimenti deve mostrare l'attività di login.Reindirizzamento attività di accesso Android e attività iniziali

Con l'aiuto di http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

Ho cercato di creare a casa e reindirizzare il login attività se l'utente non è connesso.

È questo diritto ?, o c'è una soluzione migliore.

Grazie, Bennet.

+0

Se l'applicazione memorizza solo 1 username e password, quindi il metodo è perfetto, non c'è bisogno di cambiarla. Ma se si hanno più utenti, si consiglia di utilizzare il Database SQLite. –

+1

Ciao Stealz, le credenziali di accesso effettive vengono controllate nel server remoto. non nel cellulare. la preferenza condivisa viene utilizzata per memorizzare solo una informazione utente. – Bennet

risposta

0

Per quanto riguarda la mia esperienza, utilizzo anche le preferenze condivise per la reindirizzamento della pagina di accesso/home page. L'unica differenza è che la mia prima pagina è una schermata iniziale che mostro per un certo periodo di tempo. Successivamente, controllo lo stato di accesso con le preferenze condivise e eseguo il reindirizzamento necessario.

Un punto deve essere notato qui, tuttavia alcuni server richiedono di inviare una nuova richiesta di accesso dopo una certa durata (valore configurabile inviato dal server come parte della risposta di accesso). Quindi potresti voler dare un'occhiata a questo. In un'altra delle mie app, ho bisogno di inviare una richiesta di accesso ogni volta che l'app viene avviata, quindi mi limito a memorizzare i valori di login (userName/Pass) nelle prefs condivise dopo il primo accesso, e faccio la parte di login in silenzio (senza mostrando la schermata di accesso) dopo la schermata iniziale. Quindi tutto dipende dalle tue esigenze. Ma in tutte le mie app, ho usato solo prefs condivisi.

Forse qualcun altro può suggerire un approccio migliore.

+0

Grazie, sembra una buona idea. Ma, il mio caso mi piace login di Facebook in Android. assolutamente uguale a quello. – Bennet

9

Ecco quello che sto facendo quando si accede l'utente 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(); 

nell'attività di base che tutte le mie attività si estendono (contiene l'ActionBar e il menu scorrevole) Ho il seguente controllo: (mainactivity è il mio login/schermo registrare se l'utente non è connesso im inviando loro ci)

@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(); 
    } 

e per impedire all'utente di tornare alla schermata di accesso:. 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

Hai impostato la tua attività di login come launcher? –