Tutorial

Android Shared Preferences Example Tutorial

Published on August 3, 2022
author

By Anupam Chugh

Android Shared Preferences Example Tutorial

In this tutorial we’ll use Shared Preferences in our android application to store data in the form of key-value pair. n

Android Shared Preferences Overview

Shared Preferences allows activities and applications to keep preferences, in the form of key-value pairs similar to a Map that will persist even when the user closes the application. Android stores Shared Preferences settings as XML file in shared_prefs folder under DATA/data/{application package} directory. The DATA folder can be obtained by calling Environment.getDataDirectory(). SharedPreferences is application specific, i.e. the data is lost on performing one of the following options:

  • on uninstalling the application
  • on clearing the application data (through Settings)

As the name suggests, the primary purpose is to store user-specified configuration details, such as user specific settings, keeping the user logged into the application. To get access to the preferences, we have three APIs to choose from:

  • getPreferences() : used from within your Activity, to access activity-specific preferences
  • getSharedPreferences() : used from within your Activity (or other application Context), to access application-level preferences
  • getDefaultSharedPreferences() : used on the PreferenceManager, to get the shared preferences that work in concert with Android’s overall preference framework

In this tutorial we’ll go with getSharedPreferences(). The method is defined as follows: getSharedPreferences (String PREFS_NAME, int mode) PREFS_NAME is the name of the file. mode is the operating mode. Following are the operating modes applicable:

  • MODE_PRIVATE: the default mode, where the created file can only be accessed by the calling application
  • MODE_WORLD_READABLE: Creating world-readable files is very dangerous, and likely to cause security holes in applications
  • MODE_WORLD_WRITEABLE: Creating world-writable files is very dangerous, and likely to cause security holes in applications
  • MODE_MULTI_PROCESS: This method will check for modification of preferences even if the Shared Preference instance has already been loaded
  • MODE_APPEND: This will append the new preferences with the already existing preferences
  • MODE_ENABLE_WRITE_AHEAD_LOGGING: Database open flag. When it is set, it would enable write ahead logging by default

Initialization

We need an editor to edit and save the changes in shared preferences. The following code can be used to get the shared preferences.

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

Storing Data

editor.commit() is used in order to save changes to shared preferences.

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
 
editor.commit(); // commit changes

Retrieving Data

Data can be retrieved from saved preferences by calling getString() as follows:

pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

Clearing or Deleting Data

remove(“key_name”) is used to delete that particular value. clear() is used to remove all data

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
 
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes

Project Structure

android-shared-preferences-project-view

Android Shared Preferences Project Code

The activity_main.xml layout consists of two EditText views which store and display name and email. The three buttons implement their respective onClicks in the MainActivity.

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="Save"
        android:text="Save" />

    <Button
        android:id="@+id/btnRetr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="Get"
        android:text="Retrieve" />

    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/etEmail"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="clear"
        android:text="Clear" />

    <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Email"
        android:inputType="textEmailAddress"
        android:layout_below="@+id/etName"
        android:layout_marginTop="20dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Name"
        android:inputType="text"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/etEmail"
        android:layout_alignStart="@+id/etEmail" />

</RelativeLayout>

The MainActivity.java file is used to save and retrieve the data through keys.

package com.journaldev.sharedpreferences;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
    SharedPreferences sharedpreferences;
    TextView name;
    TextView email;
    public static final String mypreference = "mypref";
    public static final String Name = "nameKey";
    public static final String Email = "emailKey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));

        }

    }

    public void Save(View view) {
        String n = name.getText().toString();
        String e = email.getText().toString();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(Name, n);
        editor.putString(Email, e);
        editor.commit();
    }

    public void clear(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        name.setText("");
        email.setText("");

    }

    public void Get(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);

        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

}

mypreference is the name of the file where the shared preferences key-value pair is stored. The image below shows the final output of our project: android-shared-preference-example This brings an end to this tutorial. You can download the project Android Shared Preferences from the below link.

Download Android Shared Preferences Example Project

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the author(s)

Category:
Tutorial
Tags:

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
February 5, 2016

i tried this codes its not working properly

- sounder

JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
February 29, 2016

Hi. Can you let me know the problem you’re facing? Thanks

- Anupam Chugh

JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
August 11, 2016

In xml you take edittext text values …After in activity class you mentiton textview ids…

- chenchaiah

JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
August 25, 2016

Hi chenchaiah, Thanks for pointing that out. The project source code is now updated.

- Anupam Chugh

JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
July 24, 2018

Could you please publish the apk file? Thank you very much.

- Javier

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    February 7, 2017

    this is very useful for us. thank you.

    - karthikeyan

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      February 28, 2017

      Is this can display the entered name and email in another layout?

      - nabila

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      February 28, 2017

      If no, how can I do that?

      - nabila

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      June 23, 2017

      It can. As shared preference is a common file for an entire app so different activity won’t matter. Use the getSharedPreferences() function in another activity and you are good to use details saved in that file. Just make sure to use the same key as it is case sensitive. Regards.

      - Rahul Mishra

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        April 20, 2017

        what is the use of public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } method in this java file?

        - Jot Jassal

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        May 13, 2017

        This is for OptionMenu … I guess he just added it coz it was together in his program… It doesn’t concern with this SharedPreference example…

        - KawaiiLovah

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          November 9, 2017

          onCreateOptionsMenu(Menu menu) this method is used for adding items in toolbar/actionbar.

          - yogesh

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            June 20, 2017

            this is better for us

            - SELVAM M

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              July 30, 2017

              Thanks a lot!!!

              - Ionut Moisoni

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                November 24, 2017

                nice job , Great , Thanks

                - مجتبی

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  February 2, 2018

                  Nice tutorial to follow. Helped a lot Thanks Anupam

                  - Rohit Reddy

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  February 3, 2018

                  Glad it helped you, Rohit.

                  - Anupam Chugh

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  June 11, 2018

                  How do i retreive my data from a fragment??

                  - Abhishek

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    April 5, 2018

                    Nice tutorial, but does the function save work when you click button save in other words, how did you handle the save button

                    - Nipa

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    April 6, 2018

                    commit() or apply() is used to save the values set in the SharedPreferences Editor.

                    - Anupam Chugh

                      JournalDev
                      DigitalOcean Employee
                      DigitalOcean Employee badge
                      May 10, 2018

                      Thank you so much for your great work…

                      - Jilson

                      JournalDev
                      DigitalOcean Employee
                      DigitalOcean Employee badge
                      May 10, 2018

                      Appreciate that!

                      - Anupam Chugh

                        Join the Tech Talk
                        Success! Thank you! Please check your email for further details.

                        Please complete your information!

                        Become a contributor for community

                        Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                        DigitalOcean Documentation

                        Full documentation for every DigitalOcean product.

                        Resources for startups and SMBs

                        The Wave has everything you need to know about building a business, from raising funding to marketing your product.

                        Get our newsletter

                        Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

                        New accounts only. By submitting your email you agree to our Privacy Policy

                        The developer cloud

                        Scale up as you grow — whether you're running one virtual machine or ten thousand.

                        Get started for free

                        Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

                        *This promotional offer applies to new accounts only.