Saturday, 11 June 2016

Android Preferences

Android shared preference is used to store and retrieve primitive information. In android, string, integer, long, number etc. are considered as primitive data type.

Android Shared preferences are used to store data in key and value pair so that we can retrieve the value on the basis of key.

It is widely used to get information from user such as in settings.

Let's see a simple example of android shared preference.




activity_main.xml

Drag one textview and two buttons from the pallete.

activity_main.xml
 <RelativeLayout 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"   
   tools:context=".MainActivity" >   
    
   <TextView   
     android:id="@+id/txtPrefs"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_centerVertical="true"   
     android:text="Data:" />   
    
   <Button   
     android:id="@+id/storeinformation"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_below="@+id/showinformation"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="18dp"   
     android:text="Store Information" />   
    
   <Button   
     android:id="@+id/showinformation"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:layout_alignParentTop="true"   
     android:layout_centerHorizontal="true"   
     android:layout_marginTop="17dp"   
     android:text="Show Information" />   
      
 </RelativeLayout>   

array.xml

It is created inside res/values directory.

array.xml
 <?xml version="1.0" encoding="utf-8"?>   
  <resources>   
   <string-array name="listOptions">   
    <item>English</item>   
    <item>Hindi</item>   
    <item>Other</item>   
    </string-array>   
    
   <string-array name="listValues">   
    <item>English Language</item>   
    <item>Hindi Language</item>   
    <item>Other Language</item>   
   </string-array>   
      
  </resources>   


prefs.xml

It is created inside res/xml directory.


prefs.xml
 <?xml version="1.0" encoding="utf-8"?>   
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >   
    
   <PreferenceCategory   
   android:summary="Username and password information"   
   android:title="Login information" >   
  <EditTextPreference   
    android:key="username"   
    android:summary="Please enter your login username"   
    android:title="Username" />   
  <EditTextPreference   
    android:key="password"   
    android:summary="Enter your password"   
    android:title="Password" />   
  </PreferenceCategory>   
    
  <PreferenceCategory   
   android:summary="Username and password information"   
   android:title="Settings" >   
  <CheckBoxPreference   
    android:key="checkBox"   
    android:summary="On/Off"   
    android:title="Keep me logged in" />   
    
  <ListPreference   
    android:entries="@array/listOptions"   
    android:entryValues="@array/listValues"   
    android:key="listpref"   
    android:summary="List preference example"   
    android:title="List preference" />   
  </PreferenceCategory>   
 </PreferenceScreen>   


Preference Demo Activity Class



PreferenceDemoActivity.java

 package com.example.preferences;   
    
 import android.os.Bundle;   
 import android.preference.PreferenceManager;   
 import android.app.Activity;   
 import android.content.Intent;   
 import android.content.SharedPreferences;   
 import android.view.Menu;   
 import android.view.View;   
 import android.widget.Button;   
 import android.widget.TextView;   
    
 public class PreferenceDemoActivity extends Activity {   
     TextView textView;   
     @Override   
     public void onCreate(Bundle savedInstanceState) {   
       super.onCreate(savedInstanceState);   
       setContentView(R.layout.activity_main);   
      
       Button storeinformation = (Button) findViewById(R.id.storeinformation);   
       Button showinformation = (Button) findViewById(R.id.showinformation);   
       textView = (TextView) findViewById(R.id.txtPrefs);   
          
       View.OnClickListener listener = new View.OnClickListener() {   
       @Override   
       public void onClick(View v) {   
       switch (v.getId()) {   
       case R.id.storeinformation:   
       Intent intent = new Intent(PreferenceDemoActivity.this,PrefsActivity.class);   
       startActivity(intent);   
       break;   
       case R.id.showinformation:   
        displaySharedPreferences();   
        break;   
       default:   
        break;   
       }   
       }   
       };   
       storeinformation.setOnClickListener(listener);   
       showinformation.setOnClickListener(listener);   
     }   
     
    
     private void displaySharedPreferences() {   
       SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(PreferenceDemoActivity.this);   
       String username = prefs.getString("username", "Default NickName");   
       String passw = prefs.getString("password", "Default Password");   
       boolean checkBox = prefs.getBoolean("checkBox", false);   
       String listPrefs = prefs.getString("listpref", "Default list prefs");   
    
         
       StringBuilder builder = new StringBuilder();   
       builder.append("Username: " + username + "\n");   
       builder.append("Password: " + passw + "\n");   
       builder.append("Keep me logged in: " + String.valueOf(checkBox) + "\n");   
       builder.append("List preference: " + listPrefs);   
       textView.setText(builder.toString());   
      
     }   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
     // Inflate the menu; this adds items to the action bar if it is present.   
     getMenuInflater().inflate(R.menu.activity_main, menu);   
     return true;   
   }   
    
 }   



PrefsActivity class

PrefsActivity.java
 package com.example.preferences;   
    
 import android.os.Bundle;   
 import android.preference.PreferenceActivity;   
    
 public class PrefsActivity extends PreferenceActivity{   
 @Override   
 protected void onCreate(Bundle savedInstanceState) {   
   super.onCreate(savedInstanceState);   
   addPreferencesFromResource(R.xml.prefs);   
 }   
 }