Android - SPLessons

Android SharedPreferences

Chapter 25

SPLessons 5 Steps, 3 Clicks
5 Steps - 3 Clicks

Android SharedPreferences

Android SharedPreferences

Android SharedPreferences allows users to save and retrieve specific data of an application in the form of key,value pair. In general, Android SharedPreferences is used to save small collection of key-values. In order to use shared preferences, you have to call getSharedPreferences() that returns a SharedPreference instance pointing to the file that contains the values of preferences. Each SharedPreferences file is managed by the framework and can be private or shared.

Preferences can be permanently stored using Android SharedPreferences in the form of a pair : key and a value, primitive data storage (boolean Strings, ints etc..). If you uninstall the application, all your data will be lost, hence this is application specific. It is added in API Level 1. The data will be stored at data/data/package name/shared_prefs. 

Now, lets take a look at how to use Android SharedPreferences class to store and retrieve application specific persistent data.

Open DDMS->File Explorer.

Create SharedPreferences:

SharedPreferences prefs = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);

Or using PreferenceManager

SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(context);

Storing data as KEY/VALUE pair:

Editor editor = pref.edit();
editor.putBoolean("key1", true); // Saving boolean - true/false
editor.putInt("key2", "int value"); // Saving integer
editor.putFloat("key3", "float value"); // Saving float
editor.putLong("key4", "long value"); // Saving long
editor.putString("key5", "string value"); // Saving string

// Save the changes in SharedPreferences
editor.commit(); // commit changes

Get SharedPreferences data:

// If value for key not exist then returns value null
prefs.getBoolean("key1", null); // getting boolean
prefs.getInt("key2", null); // getting Integer
prefs.getFloat("key3", null); // getting Float
prefs.getLong("key4", null); // getting Long
prefs.getString("key5", null); // getting String

Deleting Key value from SharedPreferences:

editor.remove("key1"); // will delete key key_name3
editor.remove("key2"); // will delete key key_name4

// Save the changes in SharedPreferences
editor.commit(); // commit changes

Clear all data from SharedPreferences:

editor.clear();
editor.commit(); // commit changes

Ex:

Create MainActivity.java under src/<your packagename>.

MainActivity.java:

public class MainActivity extends Activity {

	Context context;
	SharedPreferences prefs;
	private String TEXT="text";
	String key;
	  @Override
	  public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_main);

	    Button save=(Button)findViewById(R.id.button1);

	    Button show=(Button)findViewById(R.id.button2);
	    final EditText text=(EditText)findViewById(R.id.editText1);
	    final TextView dText=(TextView)findViewById(R.id.textView1);

	    context=this;
	    prefs=PreferenceManager.getDefaultSharedPreferences(context);

	    //on click save
	    save.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Editor edit=prefs.edit();
				edit.putString(TEXT, text.getText().toString());
				edit.commit();
			}
		});
	  //on click show
	    show.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				key=prefs.getString(TEXT, null);
				dText.setText(key);

			}
		});

	  }

	}

Create activity_main.xml under res/layout folder.

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter text" />

     <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#009ACD"
        android:layout_marginTop="30dp"
        android:text="Save" >
     </Button>

     <Button
         android:id="@+id/button2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
          android:layout_marginTop="10dp"
          android:background="#009ACD"
         android:text="Show" />

     <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="30dp"
         android:text="" />

</LinearLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.spl.myproject"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.spl.myproject.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Output: