Android: Keep username in session until logout

后端 未结 4 1553
感动是毒
感动是毒 2020-12-08 09:04

I\'m having hard time trying to figure out how to use SharedPreferences to store the username in the phone and stay in session until logout. I also need to know how at the s

4条回答
  •  情深已故
    2020-12-08 09:20

    I think this example should be very helpful.

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

    The main class is here:

    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 = "AndroidHivePref";
    
        // 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 getUserDetails(){
            HashMap user = new HashMap();
            // 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);
        }
    }
    

提交回复
热议问题