Android Session Management Using SharedPreferences - Android Example

DOWNLOAD CODE

Related Examples

In this example creating login page fuctionality and save user data as like in session. After loging user will redirect to login screen and after back button click do not show login page. Using shared preferences to save and get user data globally through out the application

 

There are two ways to save data globally.:

   1. Save data in global variables :
   If we are storing data in global variable , data will be lost once user closes the application.

   See this example - Global Variable Or Application Context Variable - Android Example

   2. Save the data in shared preferences:
   If we are Storing data in shared preferences will be persistent to all application even after user closes the application. You can save key, value pair data in Shared preferences.

   See this example - Android SharedPreferences Basics

 

Project Structure :

 

Shared Preferences user login session project sketch

 

FILE : UserSessionManager.java

 

This class contain all user session related functions.
In this class file creating SharedPreferences and inserting / updating / deleting user session data from SharedPreferences.
further explanation given as comment in class code.

 


package com.androidexample.usersessions;
    
    import java.util.HashMap;
    
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    
    public class UserSessionManager {
        
        // Shared Preferences reference
        SharedPreferences pref;
        
        // Editor reference for Shared preferences
        Editor editor;
        
        // Context
        Context _context;
        
        // Shared pref mode
        int PRIVATE_MODE = 0;
        
        // Sharedpref file name
        private static final String PREFER_NAME = "AndroidExamplePref";
        
        // All Shared Preferences Keys
        private static final String IS_USER_LOGIN = "IsUserLoggedIn";
        
        // 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 UserSessionManager(Context context){
            this._context = context;
            pref = _context.getSharedPreferences(PREFER_NAME, PRIVATE_MODE);
            editor = pref.edit();
        }
        
        //Create login session
        public void createUserLoginSession(String name, String email){
            // Storing login value as TRUE
            editor.putBoolean(IS_USER_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 will check user login status
         * If false it will redirect user to login page
         * Else do anything
         * */
        public boolean checkLogin(){
            // Check login status
            if(!this.isUserLoggedIn()){
                
                // user is not logged in redirect him to Login Activity
                Intent i = new Intent(_context, LoginActivity.class);
                
                // Closing all the Activities from stack
                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);
                
                return true;
            }
            return false;
        }
        
        
        
        /**
         * Get stored session data
         * */
        public HashMap<String, String> getUserDetails(){
            
            //Use hashmap to store user credentials
            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 user data from Shared Preferences
            editor.clear();
            editor.commit();
            
            // After logout redirect user 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);
        }
        
        
        // Check for login
        public boolean isUserLoggedIn(){
            return pref.getBoolean(IS_USER_LOGIN, false);
        }
    }

 

FILE : LoginActivity.java

 

This is the first screen( Login screen ).
For Login using Username: admin and Password: admin
Using createUserLoginSession() to save user data in SharedPreferences for further use.

 

package com.androidexample.usersessions;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {
	
	Button btnLogin;
	
	EditText txtUsername, txtPassword;
	
	// User Session Manager Class
	UserSessionManager session;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login); 
        
        // User Session Manager
        session = new UserSessionManager(getApplicationContext());                
        
        // get Email, Password input text
        txtUsername = (EditText) findViewById(R.id.txtUsername);
        txtPassword = (EditText) findViewById(R.id.txtPassword); 
        
        Toast.makeText(getApplicationContext(), 
        		"User Login Status: " + session.isUserLoggedIn(), 
        		Toast.LENGTH_LONG).show();
        
        
        // User 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();
				
				// Validate if username, password is filled				
				if(username.trim().length() > 0 && password.trim().length() > 0){
					
					// For testing puspose username, password is checked with static data
					// username = admin
					// password = admin
					
					if(username.equals("admin") && password.equals("admin")){
						
						// Creating user login session
						// Statically storing name="Android Example"
						// and email="androidexample84@gmail.com"
						session.createUserLoginSession("Android Example", 
                           "androidexample84@gmail.com");
						
						// Starting MainActivity
						Intent i = new Intent(getApplicationContext(), MainActivity.class);
						i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
						
						// Add new Flag to start new Activity
						i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
						startActivity(i);
						
						finish();
						
					}else{
						
						// username / password doesn't match&
						Toast.makeText(getApplicationContext(), 
                          "Username/Password is incorrect",
                                Toast.LENGTH_LONG).show();
						
					}				
				}else{
					
					// user didn't entered username or password
					Toast.makeText(getApplicationContext(), 
                         "Please enter username and password",
                              Toast.LENGTH_LONG).show();
					
				}
				
			}
		});
    }        
}

 

FILE : activity_login.xml

 

This file is used as layout file in LoginActivity.java.
It will create login screen design.

 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dip">
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Username (Enter 'admin')"
            android:singleLine="true"
            android:layout_marginBottom="5dip"/>
        
        <EditText android:id="@+id/txtUsername"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dip"/>
        
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Password (Enter 'admin')"
            android:layout_marginBottom="5dip"/>
        
        <EditText android:id="@+id/txtPassword"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dip"
            android:password="true"
            android:singleLine="true"/>
        
        <Button android:id="@+id/btnLogin"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Login"/>
    
    </LinearLayout>

 

FILE : MainActivity.java

 

This is the welcome screen after user login.
Get user data from SharedPreferences and show on activity.

 

package com.androidexample.usersessions;
    
    import java.util.HashMap;
    import android.app.Activity;
    import android.os.Bundle;
    import android.text.Html;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        
        
        // User Session Manager Class
        UserSessionManager session;
        
        // Button Logout
        Button btnLogout;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            // Session class instance
            session = new UserSessionManager(getApplicationContext());
            
            TextView lblName = (TextView) findViewById(R.id.lblName);
            TextView lblEmail = (TextView) findViewById(R.id.lblEmail);
            
            // Button logout
            btnLogout = (Button) findViewById(R.id.btnLogout);
            
            Toast.makeText(getApplicationContext(), 
                           "User Login Status: " + session.isUserLoggedIn(), 
                           Toast.LENGTH_LONG).show();
            
            
            
            // Check user login (this is the important point)
            // If User is not logged in , This will redirect user to LoginActivity 
            // and finish current activity from activity stack.
            if(session.checkLogin())
                finish();
            
            // get user data from session
            HashMap<String, String> user = session.getUserDetails();
            
            // get name
            String name = user.get(UserSessionManager.KEY_NAME);
            
            // get email
            String email = user.get(UserSessionManager.KEY_EMAIL);
            
            // Show user data on activity
            lblName.setText(Html.fromHtml("Name: <b>" + name + "</b>"));
            lblEmail.setText(Html.fromHtml("Email: <b>" + email + "</b>"));
            
            
            btnLogout.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    
                    // Clear the User session data
                    // and redirect user to LoginActivity
                    session.logoutUser();
                }
            });
        }
            
    }

 

FILE : activity_login.xml

 

This file is used as layout file in MainActivity.java.
It will create Welcome screen (after login) design.

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dip">
        
       
        <TextView
            android:id="@+id/lblName"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:layout_marginTop="40dip"
            android:layout_marginBottom="10dip"/>
    
        
        <TextView
            android:id="@+id/lblEmail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:layout_marginBottom="40dip"/>
        
        
        <Button android:id="@+id/btnLogout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Logout"/>
    
    </LinearLayout>