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