¿Cómo mantener la sesión en android?

¿Puede alguien decirme cómo mantener la sesión de un usuario de inicio de sesión. Por ejemplo, cuando el usuario inicia sesión en una aplicación deben iniciar sesión a menos que el usuario cierre la sesión o desinstale la aplicación similar a gmail en android.

Haz esto como una clase para tu preferencia compartida

public class Session { private SharedPreferences prefs; public Session(Context cntx) { // TODO Auto-generated constructor stub prefs = PreferenceManager.getDefaultSharedPreferences(cntx); } public void setusename(String usename) { prefs.edit().putString("usename", usename).commit(); prefsCommit(); } public String getusename() { String usename = prefs.getString("usename",""); return usename; } } 

Ahora después de hacer esta clase cuando usted quiere usarla, use como esto: haga el objeto de esta clase como

 private Session session;//global variable session = new Session(cntx); //in oncreate //and now we set sharedpreference then use this like session.setusename("USERNAME"); 

Ahora cada vez que quiera obtener el nombre de usuario a continuación, el mismo trabajo se debe hacer para el objeto de sesión y llamar a esto

 session.getusename(); 

Mejor de la suerte 🙂 mismo para la contraseña

Puede usar un valor booleano en SharedPreferences.

Cargarlo antes de iniciar sesión para comprobar si se necesita iniciar sesión.

Guárdelo después de iniciar sesión.

Tengo una manera simple en lugar de mantener una sesión.

Ie Sólo tiene que almacenar una variable boolean con su nombre de usuario y contraseña. Por defecto el valor establecido es igual a false.

Después de la primera conexión exitosa haga su valor a true.

A continuación, sólo comprobar su valor en su Mainactivity, si es cierto, a continuación, saltar a la siguiente actividad de lo contrario saltar a la actividad de inicio de sesión.

Puede conseguirlo usando Account Manager – haga clic aquí código sample- // método para agregar cuenta .. private void addAccount (String nombre de usuario, String contraseña) {

  AccountManager accnt_manager = AccountManager .get(getApplicationContext()); Account[] accounts = accnt_manager .getAccountsByType(getString(R.string.account_type));//account name identifier. if (accounts.length > 0) { return; } final Account account = new Account(username, getString(R.string.account_type)); accnt_manager.addAccountExplicitly(account, password, null); final Intent intent = new Intent(); intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, username); intent.putExtra(AccountManager.KEY_PASSWORD, password); intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, getString(R.string.account_type)); // intent.putExtra(AccountManager.KEY_AUTH_TOKEN_LABEL, // PARAM_AUTHTOKEN_TYPE); intent.putExtra(AccountManager.KEY_AUTHTOKEN, "token"); this.setAccountAuthenticatorResult(intent.getExtras()); this.setResult(RESULT_OK, intent); this.finish(); } 

// método para recuperar la cuenta. Private boolean validateAccount () {

  AccountManagerCallback<Bundle> callback = new AccountManagerCallback<Bundle>() { @Override public void run(AccountManagerFuture<Bundle> arg0) { Log.e("calback", "msg"); try { Bundle b = arg0.getResult(); if (b.getBoolean(AccountManager.KEY_ACCOUNT_MANAGER_RESPONSE)) { //User account exists!!.. } } catch (OperationCanceledException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (AuthenticatorException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; AccountManager accnt_manager = AccountManager .get(getApplicationContext()); Account[] accounts = accnt_manager .getAccountsByType(getString(R.string.account_type)); if (accounts.length <= 0) { return false; } else { loginNameVal = accounts[0].name; loginPswdVal = accnt_manager.getPassword(accounts[0]); return true; } } 

Utilice SharedPreferences. Código para guardar un valor en sharedferencias:

 SharedPreferences sp=getSharedPreferences("key", Context.MODE_PRIVATE); SharedPreferences.Editor ed=sp.edit(); ed.putInt("value", your_value); ed.commit(); 

Código para obtener valor de las preferencias compartidas:

 SharedPreferences sp=getSharedPreferences("key", Context.MODE_PRIVATE); int value = sp.getInt("value", default_value); 

Puede comprobar el inicio de sesión y cierre la sesión utilizando este valor.

Puedes obtener ese comportamiento de diferentes maneras, el que prefiero es establecer una bandera en los prefs compartidos. Cuando un usuario inicia una verificación cuando se inicia la aplicación si obtiene el valor por defecto que el usuario no está loggend, de lo contrario debe tener su bandera (yo uso el nombre de usuario) y evitar la sección de inicio de sesión.

Guardar los datos de usuario en las preferencias compartidas hasta que el usuario se cierre la sesión. Una vez que el usuario se desconecte, borre los datos de las preferencias compartidas.

Utilice el siguiente código.

SessionManager.java

 public class SessionManager { // Shared Preferences SharedPreferences pref; // Editor for Shared preferences Editor editor; // Context Context _context; // Shared pref mode int PRIVATE_MODE = 0; // Sharedpref file name private static final String PREF_NAME = "Pref"; // All Shared Preferences Keys private static final String IS_LOGIN = "IsLoggedIn"; // User name (make variable public to access from outside) public static final String KEY_NAME = "name"; // Email address (make variable public to access from outside) public static final String KEY_EMAIL = "email"; // Constructor public SessionManager(Context context){ this._context = context; pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); editor = pref.edit(); } /** * Create login session * */ public void createLoginSession(String name, String email){ // Storing login value as TRUE editor.putBoolean(IS_LOGIN, true); // Storing name in pref editor.putString(KEY_NAME, name); // Storing email in pref editor.putString(KEY_EMAIL, email); // commit changes editor.commit(); } /** * Check login method wil check user login status * If false it will redirect user to login page * Else won't do anything * */ public void checkLogin(){ // Check login status if(!this.isLoggedIn()){ // user is not logged in redirect him to Login Activity Intent i = new Intent(_context, LoginActivity.class); // Closing all the Activities i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Add new Flag to start new Activity i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Staring Login Activity _context.startActivity(i); } } /** * Get stored session data * */ public HashMap<String, String> getUserDetails(){ HashMap<String, String> user = new HashMap<String, String>(); // user name user.put(KEY_NAME, pref.getString(KEY_NAME, null)); // user email id user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null)); // return user return user; } /** * Clear session details * */ public void logoutUser(){ // Clearing all data from Shared Preferences editor.clear(); editor.commit(); // After logout redirect user to Loing Activity Intent i = new Intent(_context, LoginActivity.class); // Closing all the Activities i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Add new Flag to start new Activity i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Staring Login Activity _context.startActivity(i); } /** * Quick check for login * **/ // Get Login State public boolean isLoggedIn(){ return pref.getBoolean(IS_LOGIN, false); } } 

Y en MainActivity hacer como el siguiente.

 public class MainActivity extends Activity { // Email, password edittext EditText txtUsername, txtPassword; // login button Button btnLogin; // Alert Dialog Manager AlertDialogManager alert = new AlertDialogManager(); // Session Manager Class SessionManager session; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); // Session Manager session = new SessionManager(getApplicationContext()); // Email, Password input text txtUsername = (EditText) findViewById(R.id.txtUsername); txtPassword = (EditText) findViewById(R.id.txtPassword); Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(), Toast.LENGTH_LONG).show(); // Login button btnLogin = (Button) findViewById(R.id.btnLogin); // Login button click event btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // Get username, password from EditText String username = txtUsername.getText().toString(); String password = txtPassword.getText().toString(); // Check if username, password is filled if(username.trim().length() > 0 && password.trim().length() > 0){ // For testing puspose username, password is checked with sample data // username = test // password = test if(username.equals("test") && password.equals("test")){ // Creating user login session // For testing i am stroing name, email as follow // Use user real data session.createLoginSession("ABC", "[email protected]"); // Staring MainActivity Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); finish(); }else{ // username / password doesn't match alert.showAlertDialog(LoginActivity.this, "Login failed..", "Username/Password is incorrect", false); } }else{ // user didn't entered username or password // Show alert asking him to enter the details alert.showAlertDialog(LoginActivity.this, "Login failed..", "Please enter username and password", false); } } }); } } 
 public class Session { private SharedPreferences prefs; public Session(Context cntx) { // TODO Auto-generated constructor stub prefs = PreferenceManager.getDefaultSharedPreferences(cntx); editor = prefs.edit(); } public void setusename(String usename) { editor.putString("usename", usename).commit(); } public String getusename() { String usename = prefs.getString("usename",""); return usename; } } 
  • Compartir AccountAuthenticator personalizado entre aplicaciones
  • ¿Por qué AccountManager.addAccount puede devolver false de forma explícita?
  • Permisos de concesión de API de GMail antes de la excepción UserRecoverableAuthUIE
  • Autenticador Android inicia la pantalla de inicio de sesión cuando no hay cuenta presente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.