In this Post we are going to see how to use Android sharedpreferences. You can permanently store your preferences using sharedpreferences with the form of key and value pair.
Android Storage can be done in many ways and one of the way is shared preferences.
Some important way of storing the data in android:
- Shared Preferences: Primitive data storage (Boolean, Strings, ints etc.).
- Internal Storage: Device memory storage.
- External Storage: Store public data on storage media, like SD cards.
- SQLite Database.
In sharedpreferences we
talk about permanent storage about the application. That means that if
you uninstall the application, all your data will be lost, so this is
application specific. If you
want to store few amount of data then you can go for Shared Preferences
rather than going for SQLite and all.In that case Shared Preferences are
useful. Many time it is use for session management in android.
Session are useful when you want to store user data globally through out
the application. This can be done in two ways. One is storing them in a
global variables and second is storing the data in shared preferences.
The problem with storing data in global variable is data will be lost
once user closes the application, but storing the data in shared
preferences will be persistent even though user closes the application.
What is sharedpreferences in android :
Shared Preferences is an API from Android
SDK to store and retrieve application preferences. Shared Preferences are
simply sets of data values that stored persistently. Persistently which
mean data you stored in the Shared Preferences are still exist even if
you stop the application or turn off the device. SharedPreferences
available at the Activity level or shared across all Activity in
application package.
What is Editor in android :
Editor is a interface used for modifying values in a
SharedPreferences
object. All changes you make in an editor are batched, and not copied
back to the original SharedPreferences
until you call commit()
or apply().
Android shared preferences can be fetched using getSharedPreferences()
method in Application.You also need an editor to edit and save the changes in shared
preferences. The below code can be used to get application shared
preferences.
SharedPreferences pref = getApplicationContext().getSharedPreferences(
"Pref"
,
0
);
Editor editor = pref.edit();
How to store the data in sharedpreferences :
You can save data into shared preferences using editor. All the primitive data types like booleans, floats, ints, longs, and strings are supported by this. You have to call the editor.commit() in order to make save changes in shared preferences.
editor.putBoolean("key_name", true);
// For
storing boolean like - true/false
editor.putString("key_name", "string value"); // For
storing string
editor.putInt("key_name", "int value"); //
For Storing integer
editor.putFloat("key_name", "float value"); // For Storing float
editor.putLong(
"key_name"
,
"long value"
);
//
For
Storing long
editor.commit(); // In order to make changes
How to retrieve the data in sharedpreferences :
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
How to delete or clear the data in sharedpreferences :
If you want to delete from shared preferences you can call remove(“key name”) to delete that particular value.
editor.remove("key name"); // it will delete the corresponding item of key in sharedpreference
editor.commit(); // make commit in order to make changes in sharedpreference
If you want to delete all the data, call clear();
editor.clear(); // delete all the data
editor.commit(); // make commit in order to make changes in sharedpreference
If you want to delete all the data, call clear();
editor.clear(); // delete all the data
editor.commit(); // make commit in order to make changes in sharedpreference
- Create a new project in Eclipse File > New > Android Application Project and fill the required details.
- Here we have five total five activity and five xml file called layout files.
- You can copy paste all activities and xml files in your project one by one carefully and also can download the complete working project sample from download link.
public class SplashActivity extends Activity {
public static String str_login_test;
public static SharedPreferences sh;
public static Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
// here initializing the shared preference
sh = getSharedPreferences("myprefe", 0);
editor = sh.edit();
// check here if user is login or not
str_login_test = sh.getString("loginTest", null);
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
/*
* if user login test is true on oncreate then redirect the user
* to result page
*/
if (str_login_test != null
&& !str_login_test.toString().trim().equals("")) {
Intent send = new Intent(getApplicationContext(),
LogoutActivity.class);
startActivity(send);
}
/*
* if user login test is false on oncreate then redirect the
* user to login & registration page
*/
else {
Intent send = new Intent(getApplicationContext(),
Login_and_Registration.class);
startActivity(send);
}
}
}, 3000);
}
}
Here is the Login_and_Registration.java : This is the activity to show the button for login and registration
public class Login_and_Registration extends Activity implements OnClickListener {
Button login, register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_registration);
login = (Button) findViewById(R.id.btn_login);
register = (Button) findViewById(R.id.btn_register);
login.setOnClickListener(this);
register.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_login:
// on login button click send to login activity
Intent login = new Intent(getApplicationContext(), Login.class);
startActivity(login);
break;
// on register button click send to register activity
default:
Intent registeration = new Intent(getApplicationContext(),
Registration.class);
startActivity(registeration);
break;
}
}
// on back key press exit the application.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(Login_and_Registration.this,
SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
}
Here is the Registration.java : This is the activity to make the registration.
public class Registration extends Activity implements OnClickListener {
Button register;
String url;
String str_Name, str_Password, str_RePassword, str_Email, str_Mobile,
random;
EditText edt_Name, edt_Password, edt_RePassword, edt_Email, edt_Mobile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.registration);
register = (Button) findViewById(R.id.btn_register);
edt_Name = (EditText) findViewById(R.id.edt_Rname);
edt_Password = (EditText) findViewById(R.id.edt_Rpassword);
edt_RePassword = (EditText) findViewById(R.id.edt_RRepassword);
edt_Mobile = (EditText) findViewById(R.id.edt_Rmobile);
edt_Email = (EditText) findViewById(R.id.edt_email);
register.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
str_Name = edt_Name.getText().toString();
str_Password = edt_Password.getText().toString();
str_RePassword = edt_RePassword.getText().toString();
str_Mobile = edt_Mobile.getText().toString();
str_Email = edt_Email.getText().toString();
if (str_Name.length() == 0 & str_Password.length() == 0
& str_RePassword.length() == 0 & str_Mobile.length() == 0) {
Toast.makeText(getApplicationContext(),
"All fields are mandatory to fill", Toast.LENGTH_LONG)
.show();
} else if (str_Name.length() == 0) {
Toast.makeText(getApplicationContext(), "Please enter your Name",
Toast.LENGTH_LONG).show();
} else if (str_Password.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your Password", Toast.LENGTH_LONG).show();
} else if (str_RePassword.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please Re-enter your Password", Toast.LENGTH_LONG).show();
}
else if (str_Email.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your Email Id", Toast.LENGTH_LONG).show();
}
else if (str_Password.contains(str_RePassword) != str_RePassword
.contains(str_Password)) {
Toast.makeText(getApplicationContext(),
"Confirm Password does not match", Toast.LENGTH_LONG)
.show();
} else if (str_Mobile.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your mobile number", Toast.LENGTH_LONG)
.show();
}
else {
SplashActivity.editor.putString("name", str_Name);
SplashActivity.editor.putString("password", str_RePassword);
SplashActivity.editor.putString("email", str_Email);
SplashActivity.editor.putString("mobile", str_Mobile);
SplashActivity.editor.commit();
Intent sendtoLogin = new Intent(getApplicationContext(),
Login_and_Registration.class);
Toast.makeText(getApplicationContext(),
"You have successfully registered", Toast.LENGTH_LONG)
.show();
startActivity(sendtoLogin);
}
}
// on back key press exit the application.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(Registration.this, SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
}
Here is the Login.java : This is the activity to make the login.
public class Login extends Activity implements OnClickListener {
String str_UserName, str_Password, str_getID, str_getPass;
EditText edt_UName, edt_Password;
Button login;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
/* fetching the data from shared preference in order to make user login */
/* data are saved in application through SplashActivity */
/* only name and password is sufficient to make login */
str_getID = SplashActivity.sh.getString("name", null);
str_getPass = SplashActivity.sh.getString("password", null);
login = (Button) findViewById(R.id.btn_login);
edt_UName = (EditText) findViewById(R.id.edt_userName);
edt_Password = (EditText) findViewById(R.id.edt_password);
login.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
str_UserName = edt_UName.getText().toString();
str_Password = edt_Password.getText().toString();
/* make edittext condition for empty, input etc match */
if (str_UserName.length() == 0 & str_Password.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your login User Name and Password",
Toast.LENGTH_LONG).show();
} else if (str_UserName.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your User Name", Toast.LENGTH_LONG).show();
} else if (str_Password.length() == 0) {
Toast.makeText(getApplicationContext(),
"Please enter your Password", Toast.LENGTH_LONG).show();
}
else if (str_getID.matches("") && str_getPass.matches("")) {
Toast.makeText(getApplicationContext(),
"Details does not belongs to any account",
Toast.LENGTH_LONG).show();
}
else if (!(str_UserName.matches(str_getID))) {
Toast.makeText(getApplicationContext(),
"Either login/password is incorrect", Toast.LENGTH_LONG)
.show();
}
else if (!(str_getPass.matches(str_Password))) {
Toast.makeText(getApplicationContext(),
"Either login/password is incorrect", Toast.LENGTH_LONG)
.show();
}
else if ((str_getID.matches(str_UserName))
&& (str_getPass.matches(str_Password))) {
/*
* dont forget to commit after doing the operation with shared
* preference
*/
/* without commit data will not saved to shared preference */
SplashActivity.editor.putString("loginTest", "true");
SplashActivity.editor.commit();
Toast.makeText(getApplicationContext(),
"You have successfuly login", Toast.LENGTH_LONG).show();
Intent sendToLogout = new Intent(getApplicationContext(),
LogoutActivity.class);
startActivity(sendToLogout);
}
}
// on back key press exit the application.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(Login.this, SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
}
Here is the LogoutActivity.java : This is the activity to make the logout.
public class LogoutActivity extends Activity implements OnClickListener {
String str_getName, str_getPassword, str_getEmail, str_getMobile;
TextView profile;
Button logout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logout);
/*
* fetching the all data corresponding to each key from shared
* preference in order to show the user profile
*/
str_getName = SplashActivity.sh.getString("name", null);
str_getPassword = SplashActivity.sh.getString("password", null);
str_getEmail = SplashActivity.sh.getString("email", null);
str_getMobile = SplashActivity.sh.getString("mobile", null);
profile = (TextView) findViewById(R.id.txt_profile);
logout = (Button) findViewById(R.id.logout);
logout.setOnClickListener(this);
/* set fetch data to textview, textview show the user complete profile */
profile.setText("Name : " + str_getName + "\n" + "\n" + "Password : "
+ str_getPassword + "\n" + "\n" + "Email : " + str_getEmail
+ "\n" + "\n" + "Mobile : " + str_getMobile);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/*
* logout button click does not delete the shared preference all data
* but it only delete the user login test key, you can do the login
* again with same credentials. In order to delete the complete data
* call editor.clear(); followed by editor.commit(); you can edit your
* complete profile by doing registration once again, it will overwrite
* your previous data.
*/
Toast.makeText(getApplicationContext(), "You have successfully logout",
Toast.LENGTH_LONG).show();
SplashActivity.editor.remove("loginTest");
SplashActivity.editor.commit();
Intent sendToLoginandRegistration = new Intent(getApplicationContext(),
Login.class);
startActivity(sendToLoginandRegistration);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(LogoutActivity.this,
SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
}
Here is the splash.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"
android:background="@drawable/splash" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="170dp"
android:text="Welcome To"
android:textColor="#569B1A"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="200dp"
android:autoLink="web"
android:text="http://androidtutorialsrkt.blogspot.in/"
android:textColor="#569B1A"
android:textSize="15sp"
android:textStyle="bold" />
</RelativeLayout>
Here is the login_registration.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFE9B1"
android:orientation="vertical" >
<Button
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="116dp"
android:background="@drawable/btn_login_reg_design"
android:ems="10"
android:padding="10dp"
android:text="Login"
android:textColor="#ffff00"
android:textStyle="bold" />
<Button
android:id="@+id/btn_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_login"
android:layout_centerHorizontal="true"
android:layout_marginTop="23dp"
android:background="@drawable/btn_login_reg_design"
android:ems="10"
android:padding="10dp"
android:text="Register"
android:textColor="#ffff00"
android:textStyle="bold" />
</RelativeLayout>
Here is the registration.xml :
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFE9B1"
android:orientation="vertical" >
<EditText
android:id="@+id/edt_Rname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="80dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="User Name"
android:padding="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/edt_Rpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="Password"
android:inputType="textPassword"
android:padding="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/edt_RRepassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="Confirm Password"
android:inputType="textPassword"
android:padding="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/edt_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="Email Id"
android:inputType="textEmailAddress"
android:padding="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/edt_Rmobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="Mobile No."
android:inputType="number"
android:padding="10dp" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btn_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:background="@drawable/btn_login_reg_design"
android:ems="10"
android:padding="10dp"
android:text="Register"
android:textColor="#ffff00"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
Here is the login.xml :
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFE9B1"
android:gravity="center"
android:orientation="vertical" >
<EditText
android:id="@+id/edt_userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="User Name"
android:padding="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/edt_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/edt_design"
android:ems="12"
android:hint="Password"
android:inputType="textPassword"
android:padding="10dp" />
<Button
android:id="@+id/btn_login"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:background="@drawable/btn_login_reg_design"
android:ems="10"
android:padding="10dp"
android:text="Login"
android:textColor="#ffff00"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
Here is the logout.xml :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txt_welcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:autoLink="web"
android:text="Welcome to androidtutorialsrkt.blogspot.in"
android:textColor="#569B1A"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/contactUs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txt_welcome"
android:layout_centerHorizontal="true"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:text="Contact Us at : robi.tomar72@gmail.com and call us at +918586875317 for help"
android:textColor="#569B1A"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txt_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginLeft="40dp"
android:layout_marginTop="150dp"
android:text="profile"
android:textColor="#0000FF"
android:textSize="15sp"
android:textStyle="bold" />
<Button
android:id="@+id/logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp"
android:background="@drawable/btn_login_reg_design"
android:ems="10"
android:padding="10dp"
android:text="Logout"
android:textColor="#ffff00"
android:textStyle="bold" />
</RelativeLayout>
Here is the ouput screen :
Download the complete project here.