SharedPreference doesn't work in android - android

I use this code to save String value in SharedPreference , But returns empty String! I tried very hard and spend long time, But I can't understand why?
sp=getSharedPreferences("sp", Activity.MODE_PRIVATE);
bshare.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
sp.edit().putString("a","ali");
sp.edit().commit();
Log.i("sp","z"+sp.getString("a","");
}
});

Try this way:
SharedPreferences sp = this.getSharedPreferences("sp", Activity.MODE_PRIVATE);
SharedPreferences.Editor aa = sp.edit();
Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());
// Add the new value.
myStrings.add("Another string");
// Save the list.
aa.putStringSet("myStrings", myStrings);
aa.commit();

Related

Get a java.lang.ClassCastException during using SharedPreferences

I use SharedPreferences in my app to save small Integer data . But I get ClassCastException in this line .
int number = mySharedPref.getInt("numberOne",0);
Here is my code .
To store data .
mySharedPref=getSharedPreferences("MyPref",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPref.edit();
editor.putInt("numberOne",myInteger);
To get data
mySharedPref = getSharedPreferences("MyPref",Context.MODE_PRIVATE);
int number= mySharedPref.getInt("numberOne",0);
display(number);
I think the problem is that you have not committed the data stored in SharedPreferences.
So you should do a
editor.commit();
while storing the data.
Try this
To Store data
public static void setInteger(Context context, String key, Integer Value) {
sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor sEdit = sharedPreferences.edit();
sEdit.putInt(key, Value);
sEdit.commit();
}
To get data
public static Integer getInteger(Context context, String key) {
sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
Integer value = sharedPreferences.getInt(key, 0);
return value;
}
You have to call commit() method to save data changes in SharedPreferences.
Here is the get data method
private void showData() {
SharedPreferences sharedPreferences = getSharedPreferences("MyFile", Context.MODE_PRIVATE);
int number = sharedPreferences.getInt("numberOne", 0);
display(number);
}
Here is get savemethod
private void saveData(int value) {
SharedPreferences sharedPreferences = getSharedPreferences("MyFile", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("numberOne", value);
editor.commit();
}

Key-Value Store Data not retrieved

In my app, I am trying to save a key value as zero or one depending on whether a checkbox is checked. I retrieve these values in a different activity. However, when I attempt to retrieve the value, I am getting an empty string:
Saving key values in Activity 1(ScienceCoursesCheck):
public void setDefaults(String key, String value) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(key, value);
editor.commit();
}
public void onCheckboxClicked(View view) {
// Is the view now checked?
boolean checked = ((CheckBox) view).isChecked();
// Check which checkbox was clicked
switch(view.getId()) {
case R.id.checkBox_APBio:
if (checked) {
setDefaults("APBio", "1");
}
else {
setDefaults("APBio", "0");
break;
}
}}
Retrieving key values in activity 2(MyHome):
public static String getDefaults(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
public void myMethod() {
SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);
String APBio = myPrefs.getString("APBio","");
if (APBio.equals("1")){
Button myButton = new Button(this);
myButton.setText(APBio);
RelativeLayout ll = (RelativeLayout)findViewById(R.id.activity_my_home);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
ll.addView(myButton, lp);
}
}
Is the second activity accessing the correct SharedPreferences file?
Use the following code for sharedpreference. Call
Util.saveInfo(activityContext,_key,_value)
when you want to save the info. Then call
Util.getInfo(getApplicationContext(),_key)
to get the info.
public class Util{
public static void saveInfo(Context context, String key, String value )
{
try
{
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, value).apply();
}
catch (Exception ex)
{
Log.e(TAG," saveInfo "+ex+"");
}
}
public static String getInfo(Context context, String key)
{
try {
return PreferenceManager.getDefaultSharedPreferences(context).getString(key,"");
}
catch (Exception e)
{
e.printStackTrace();
}
return "";
}
The issue is because when you store the items in SharedPreferences you are using
PreferenceManager.getDefaultSharedPreferences
but when you retrieve them you are using
getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);
These are two different SharedPreferences files. Try using getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE); for your setting method as well. Or perhaps you meant to use your getDefaults() method in activity 2 instead of myPrefs
That is because you are saving in the DefaultSharedPreferences file
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
and retrieving from another file named "ScienceCoursesCheck"
SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);
and they are not the same file!
See the difference between getSharedPreferences and getDefaultSharedPreferences in this answer
====
Solution is either to always use DefaultSharedPreferences OR always use the file named "ScienceCoursesCheck" .
The problem is you're saving the values in the DefaultSharedPreference and trying to retrieve the values from the ScienceCoursesCheck preference file.
Try below code for setDefaults method.The getDefaultSharedPreference and getSharedPreference methods are different.
See this link for the difference.
public void setDefaults(String key, String value) {
SharedPreferences sharedPref = getApplicationContext().getDefaultSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(key, value);
editor.commit();
}
Hope this helps you...

set and store password in android apps

I have try to set and store the password for my apps, but it is not working at all. The password should be setted first time then return the home page, then when the user open it again the password should be stored but somehow it didn't store it.
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences passfile = getSharedPreferences("ans",0);
String pass = passfile.getString("ans", null);
check.setOnClickListener(new OnClickListener () {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
String answer1 = answer.getText().toString();
//Check that user typed in an answer
if(answer1.length()<8){
Toast.makeText(CheckPwActivity.this, "Answer must be 8 characters long", Toast.LENGTH_SHORT).show();
answer.setText("");
answer.requestFocus();
return;
}
answer.getEditableText().toString();
//check if the answer is valid
if (answer1.equals("ans")) {
Intent intent2 = new Intent(CheckPwActivity.this,MainActivity.class);
startActivity(intent2);
}else{
return;
}
}});
}
public void setPassword(String key, String value) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
Editor preferenceEditor = context.getSharedPreferences("password", 8).edit();
preferenceEditor.putString(key, value);
preferenceEditor.commit();
}
public static String getPassword(String filename) {
return context.getSharedPreferences("password", 2).getString(filename,"");
}
you are using shared preferences wrong, in your set password you get shared preferences but then you get it again but in a different context
this is all you need to use shared preferences
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
then when you want to set it you use the editor you just got
editor.putString(key,pass).commit;
then to get it from shared preferences you would just do
preferences.getString(key,defaultString);

How can i add multiple entries in a shared prefrences file

Can you please tell me how can i use shared prefrences to write multiple entries in a shared prefrences file.Like if i want to add multiple names in the shared pref file
i am using the following code but each time i click on submit button it overrides the previous entry.
public void onClick(View v)
{
SharedPreferences settings = getSharedPreferences("users", 0);
SharedPreferences.Editor editorUser = settings.edit();
editorUser.putString("user", editUser.getText().toString());
editorUser.commit();
}
You have to use different keys, e.g.:
SharedPreferences settings = getSharedPreferences("users", 0);
SharedPreferences.Editor editorUser = settings.edit();
for (int i = 0; i < users.size(); i++)
editorUser.putString("user" + i, users.get(i));
editorUser.commit();
You are facing that overriding issue because you are using the same shared preference key each time to save the value. Assuming that you are using the same EditText for multiple entries, I guess the following snippet will do the trick.
counter=0;
save.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
settings = getSharedPreferences("users", 0);
SharedPreferences.Editor editorUser = settings.edit();
editorUser.putString("user"+counter, Edittext.getText().toString());
editorUser.commit();
counter++;
Edittext.setText("");
}
});
show.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
for(int i=0;i<counter;i++)
{
Log.i("User "+i, ""+settings.getString("user"+i, ""));
}
}
});
Here, I used the show button OnClickListner just to check for the multiple entries through EditText. But here I would like to suggest you to go for SQLite DB if you really wish to store multiple user info.
This is how you can do this
Go through with these 2 URL this will help you
vogella.
mobile.tutsplus.com
Save
public void saveInformation(String username,String password) {
SharedPreferences shared = getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.commit();
}
Load
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String username = sharedPreferences.getString("username", "");
String password = sharedPreferences.getString("password", "");
}
Edit
private void editDate(){
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("username", mSaved.getText().toString());
editor.putInt("selection-start", mSaved.getSelectionStart());
editor.putInt("selection-end", mSaved.getSelectionEnd());
editor.commit();
}
To save multiple users data in will suggest you to create multiple files for each user and then save it in shared pref
Just go through with the diffrence between getDefaultSharedPreferences and getSharedPreferences from here Diffrence Link

SavePreferences only saving last item in ListView

I was trying to use Save/Load Preferences to save the User's input through EditView. However, my current code only saves the last string the user inputted. So when i re-enter the app, the only string in the ListView is the last string the user entered.
How can i fix this?
EDITED CODE BELOW:
addButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
String task = display.getText().toString();
adapter.add(task);
adapter.notifyDataSetChanged();
JSONArray array = new JSONArray();
array.add(task);
SavePreferences("LISTS", array.toString());
}
});
}
protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = data.edit();
editor.putString("LISTS", value);
editor.commit();
}
protected void LoadPreferences(){
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
String dataSet = data.getString("LISTS", "");
adapter.add(dataSet);
adapter.notifyDataSetChanged();
ArrayList<String> dataSetarrlist = new ArrayList<String>();
dataSetarrlist.add(dataSet);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,dataSetarrlist);
lv.setAdapter(adapter);
Aren't you overwriting the same key?
SavePreferences("LISTS", task);
in
editor.putString(key, value);
It will always write on key "LISTS" of the SharedPreferences, overwriting the previous value.
You should try to get the current saved values to a string and append the new value.
Sort of:
String dataset = loadPreferences();
SavePreferences("LISTS",dataset+task);
Depending on the desired save format.
-- Example --
protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
JSONArray array = new JSONArray(data.getString(key,"");
SharedPreferences.Editor editor = data.edit();
editor.putString(key, value);
editor.commit();
}
protected void LoadPreferences(){
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
JSONArray dataSet = new JSONArray(data.getString("LISTS", "None Available");)
for(int i = 0; i<dataSet.length; i++)
adapter.add(dataSet.getString(i);
adapter.notifyDataSetChanged(); // You don't need this if you aren't overriding the Adapters 'add' method.
}
Your problem is that you are writing on the same key "LISTS" and it will take always the last value. You should use different keys or just get the previous value from "LISTS" key, add a separator character and append the new preferences. Then in your LoadPReferences use String.split(pattern) to get all the values.

Categories

Resources