Как поддерживать сеанс в Android?

Может ли кто-нибудь сказать мне, как вести сеанс для входа пользователя в систему. Например, когда пользователь должен войти в приложение, он должен быть подписан, если пользователь не выйдет из системы или не удалит приложение, подобное gmail в android.

Сделайте так, чтобы сделать один класс для вашей sharedpreference

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

Теперь после создания этого класса, когда вы хотите его использовать, используйте вот так: сделайте объект этого класса похожим

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

Теперь, когда вы хотите получить имя пользователя, необходимо выполнить такую ​​же работу для объекта сеанса и вызвать это

 session.getusename(); 

Удачи 🙂 одинаково для пароля

Вы можете использовать логическое значение в SharedPreferences.

Загрузите его перед входом в систему, чтобы проверить, требуется ли вход в систему.

Сохраните его после входа в систему.

У меня есть простой способ, а не поддерживать сеанс.

Т.е. просто сохраните одну boolean переменную с вашим именем пользователя и паролем. По умолчанию установленное значение равно false.

После первого успешного входа в систему значение true.

Затем просто проверьте его значение на вашем Mainactivity, если оно верно, а затем перейдите к следующему действию, иначе перейдите к активности входа.

Вы можете добиться этого, используя Account Manager – нажмите здесь код sample- // метод для добавления учетной записи. Private void addAccount (имя пользователя String, пароль String) {

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

// метод для извлечения учетной записи. 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; } } 

Используйте SharedPreferences. Код для сохранения значения для sharedpreferences:

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

Код для получения значения из sharedpreferences:

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

Вы можете проверить логин и выход из системы, используя это значение.

Вы можете получить это поведение несколькими способами, я предпочитаю устанавливать флаг в общих привилегиях. Когда пользователь регистрируется при проверке, когда приложение запускается, если вы получаете значение по умолчанию, которое пользователь не зарегистрировал, иначе вы должны установить свой флаг (я использую имя пользователя) и избежать раздела входа в систему.

Сохранять пользовательские данные в общих предпочтениях до выхода пользователя из системы. После того, как пользователь выйдет из режима очистки данных из общих настроек.

Используйте следующий код.

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

И в MainActivity сделайте следующее.

 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", "abc@gmail.com"); // 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; } } 
Intereting Posts