In previous post Store Data – SharedPreferences – Android we discussed about cases, when we should save data in SharedPreferences. Here is a demo Android App for the same.
Create a new Android project using following information.
| Project Name | SharedPreference Demo |
|---|---|
| Package Name | com.pcsalt.example.sharedpreferencedemo |
| Minimum SDK Version | 16 |
| Activity Type | Empty Activity |
| Activity Name | MainActivity |
| Layout Name | activity_name |
Adding dependencies in build.gradle
In this tutorial we are going to display all saved keys and values in RecyclerView. So, following dependency needs to be added into SharedPreferenceDemo/app/build.gradle.
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
}
(adsbygoogle = window.adsbygoogle || []).push({});
Update layout of activity_main.xml
By default, activity_main.xml comes with RelativeLayout as parent Layout and a TextView with Hello world text. Update this layout to have:
– two EditText for Key and Value,
– one Button to save Key and Value pair in SharedPreferences, and
– a RecyclerView to display all saved values in SharedPreferences.
Create list item for RecyclerView
The RecyclerView would display the saved key, value pair in a list. So, create a resource file list_item_pref.xml
Create Utility classes
It is a good idea to keep things separate, if it does not do the similar thing. For this purpose, we have two utility classes.
– Utility.java : for getting text from EditText.
– PrefUtil.java : for performing basic operations on SharedPreferences.
Create Utility.java
package com.pcsalt.example.sharedpreferencedemo;
import android.widget.TextView;
/**
* Created by krrishnaaaa on Oct 02, 2015
*/
public final class Utility {
public static String getText(TextView textView) {
String text = "";
if (textView != null) {
text = textView.getText().toString();
}
return text;
}
}
Create PrefUtil.java
package com.pcsalt.example.sharedpreferencedemo;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by krrishnaaaa on Oct 02, 2015
*/
public final class PrefUtil {
private static SharedPreferences getPref(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
public static void saveString(Context context, String key, String value) {
getPref(context).edit().putString(key, value).apply();
}
public static String getString(Context context, String key, String defValue) {
return getPref(context).getString(key, defValue);
}
public static void removeString(Context context, String key) {
getPref(context).edit().remove(key).apply();
}
public static List getAllValues(Context context) {
Map values = getPref(context).getAll();
List prefDataList = new ArrayList();
for (Map.Entry entry : values.entrySet()) {
PrefData prefData = new PrefData();
prefData.key = entry.getKey();
prefData.value = entry.getValue().toString();
prefDataList.add(prefData);
}
return prefDataList;
}
}
Create model class PrefData.java
This model class would hold the key and value stored in SharedPreferences and list of this model would be displayed in RecyclerView.
package com.pcsalt.example.sharedpreferencedemo;
/**
* Created by krrishnaaaa on Oct 02, 2015
*/
public final class PrefData {
public String key;
public String value;
public PrefData() {
}
public PrefData(String key, String value) {
this.key = key;
this.value = value;
}
@Override
public boolean equals(Object object) {
return object instanceof PrefData && key.equals(((PrefData) object).key);
}
@Override
public int hashCode() {
return super.hashCode();
}
}
Create Adapter for RecyclerView
This adapter will hold and display the key value stored in SharedPreferences.
package com.pcsalt.example.sharedpreferencedemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
* Created by krrishnaaaa on Oct 02, 2015
*/
public class PrefAdapter extends RecyclerView.Adapter {
private LayoutInflater mLayoutInflater;
private List mPrefDataList;
public PrefAdapter(Context context, List prefDataList) {
this.mLayoutInflater = LayoutInflater.from(context);
this.mPrefDataList = prefDataList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(R.layout.list_item_pref, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolder) {
ViewHolder viewHolder = (ViewHolder) holder;
PrefData current = mPrefDataList.get(position);
viewHolder.textViewKey.setText(current.key);
viewHolder.textViewValue.setText(current.value);
}
}
@Override
public int getItemCount() {
if (mPrefDataList != null) {
return mPrefDataList.size();
} else {
return 0;
}
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textViewKey, textViewValue;
public ViewHolder(View itemView) {
super(itemView);
textViewKey = (TextView) itemView.findViewById(R.id.text_view_key);
textViewValue = (TextView) itemView.findViewById(R.id.text_view_value);
}
}
}
Update MainActivity.java to store and display contents to/from SharedPreferences
MainActivity will be performing following tasks:
– Link all views from its layout
– Save key and value from EditText in SharedPreferences
– Update RecyclerView with the values stored in SharedPreferences
package com.pcsalt.example.sharedpreferencedemo;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.pcsalt.example.sharedpreferencedemo.listener.RecyclerClickListener;
import com.pcsalt.example.sharedpreferencedemo.listener.RecyclerTouchListener;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Context mContext = MainActivity.this;
private EditText mEditTextKey;
private EditText mEditTextValue;
private List mPrefDataList;
private PrefAdapter mPrefAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
mEditTextKey = (EditText) findViewById(R.id.edit_text_key);
mEditTextValue = (EditText) findViewById(R.id.edit_text_value);
Button buttonSave = (Button) findViewById(R.id.button_save);
buttonSave.setOnClickListener(mOnClickListener);
RecyclerView recyclerViewPrefValues = (RecyclerView) findViewById(R.id.recycler_view_pref_values);
recyclerViewPrefValues.setLayoutManager(new LinearLayoutManager(mContext));
mPrefDataList = PrefUtil.getAllValues(mContext);
mPrefAdapter = new PrefAdapter(mContext, mPrefDataList);
recyclerViewPrefValues.setAdapter(mPrefAdapter);
RecyclerTouchListener recyclerTouchListener = new RecyclerTouchListener(mContext, recyclerViewPrefValues, new RecyclerClickListener() {
@Override
public void onClick(View view, int position) {
PrefData prefData = mPrefDataList.get(position);
PrefUtil.removeString(mContext, prefData.key);
mPrefDataList.remove(position);
mPrefAdapter.notifyItemRemoved(position);
}
});
recyclerViewPrefValues.addOnItemTouchListener(recyclerTouchListener);
}
private void saveValueInPref() {
String key = Utility.getText(mEditTextKey);
String value = Utility.getText(mEditTextValue);
if (key.isEmpty()) {
mEditTextKey.setError("Enter key");
} else if (value.isEmpty()) {
mEditTextValue.setError("Enter value");
} else {
PrefUtil.saveString(mContext, key, value);
mEditTextKey.setText("");
mEditTextValue.setText("");
PrefData newPrefData = new PrefData(key, value);
if (mPrefDataList.contains(newPrefData)) {
int index = mPrefDataList.indexOf(newPrefData);
mPrefDataList.remove(index);
mPrefAdapter.notifyItemRemoved(index);
}
mPrefDataList.add(newPrefData);
int position = mPrefAdapter.getItemCount() - 1;
mPrefAdapter.notifyItemInserted(position);
}
}
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_save:
saveValueInPref();
break;
}
}
};
}
Download source code
Working source code is shared on GitHub – SharedPreference-Demo