I've tried to save the string TRUE and call it right away to check if it is successfully saved, but the result continuously spits 0, which is the default value. What is wrong with my code?
SharedPreferences settings = getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("doublePoint", "TRUE");
String doublePoint = settings.getString("doublePoint", "0");
Toast.makeText(getApplicationContext(), doublePoint,Toast.LENGTH_LONG).show();
You have to do add editor.commit() to save it :
SharedPreferences settings = getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("doublePoint", "TRUE");
editor.commit(); // This command saves the data
String doublePoint = settings.getString("doublePoint", "0");
Toast.makeText(getApplicationContext(), doublePoint, Toast.LENGTH_LONG).show();
EDIT: As specified in the comment by Tyler V, you have two solutions:
commit(): this saves the value and return true if the new values were successfully written. The action is performed on the Main Thread and you might experiences freeze if the operation takes too long.
apply(): this saves the changes to the in-memory SharedPreferences immediately but starts an asynchronous commit to disk and you won't be notified of any failures.
PS: it's safe to replace any instance of commit() with apply() if you were already ignoring the return value.
Source : https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()
You need to add commit() once you put a value in SharedPreferences. Just add that one in this way:
SharedPreferences settings = getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit().commit();
editor.putString("doublePoint", "TRUE");
String doublePoint = settings.getString("doublePoint", "0");
Toast.makeText(getApplicationContext(), doublePoint, Toast.LENGTH_LONG).show();
For more info, check out this example.
Related
I am saving a value in Preference, but it always give me the default value. When the app is opened, I can get the actual value. But when I am getting the value from the IntentService, it always give me the default value.
Code for saving the value:
prefs = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
Code for reading the value:
prefs = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
String value = prefs.getString(key, defaultValue);
But if i change file name then its working for some period but afterward again it start giving default value
Try changing your access mode from Context.MODE_PRIVATE since you are reading it from outside.
Try
prefs = context.getSharedPreferences(NAME, Context.MODE_MULTI_PROCESS);
Retrieving stuff from Shared Preferences:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(Context);
String s = sp.getString("key", null); // get "value" from the Shared Preferences
I am using following code:
SharedPreferences sharedPref = getSharedPreferences(GlobalDefines.SHARED_PREFERENCES, Context.MODE_PRIVATE);
String test = sharedPref.getString(GlobalDefines.GCM_KEY, "");
SharedPreferences.Editor editor = sharedPref.edit();
editor.clear();
editor.putBoolean(GlobalDefines.USER_IS_LOGGED_IN, false);
editor.remove(GlobalDefines.USER_NAME);
editor.remove(GlobalDefines.USER_PASSWORD);
editor.commit();
test = sharedPref.getString(GlobalDefines.GCM_KEY, "");
The string "test" has a value when I get the value from the shared preferences for the first time; when I remove another value from the preferences and want to get the same value (GCM_KEY) again, it is returned empty.
Why is that?
editor.clear() tells the editor that you want to remove ALL values from your SharedPreferences. Remove this line and you will see the expected behavior.
I have a problem with SharedPreferences in Android.
This is my code:
SharedPreferences s = this.getSharedPreferences("kurs",MODE_WORLD_READABLE);
s.edit().putString("eur", "1.80");
s.edit().commit();
SharedPreferences a = this.getSharedPreferences("kurs",MODE_WORLD_READABLE);
String kurs = a.getString("eur","7");
Toast hhh= Toast.makeText(getApplicationContext(),kurs, Toast.LENGTH_LONG);
hhh.show();
I´m setting the String and want to read it out directly after that in the onCreate method. But i always get the specified default value "7".
What was wrong? I already researched for that problem, but i can´t found helpful things.
Thanks for your help :)
Each time you call "s.edit()" a new editor is created. Thus your "commit()" call is on an instance of the editor that has not had your setting applied. Try this:
SharedPreferences s = this.getSharedPreferences("kurs",MODE_WORLD_READABLE);
Editor editor = s.edit();
editor.putString("eur", "1.80");
editor.commit();
Please try my code below. What i think is wrong in your code, that you are using different "Editor" instances here:
"s.edit().putString("eur", "1.80");"
and here
s.edit().commit();
private static String APP_SHARED_PREFS = "MyAppID";
// Write the value
SharedPreferences.Editor prefsEditor = getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE).edit();
prefsEditor.putString("KEY", "VALUE");
prefsEditor.commit();
// Get the value
return getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE).getString("KEY", "");
SharedPreferences myPrefs = this.getSharedPreferences("kurs", MODE_WORLD_READABLE);
SharedPreferences.Editor editor = myPrefs.edit();
editor.putString("eur", "1.80");
// commit the edits
editor.commit();
SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", context.MODE_WORLD_READABLE);
String kurs = myPrefs.getString("eur", "7");
Toast hhh= Toast.makeText(getApplicationContext(),kurs, Toast.LENGTH_LONG);
hhh.show();
Try This
I want to save a time from a TimePickerDialog to sharedpreferences from my settings menu. I then want to retrieve this data when from another fragment. The time is stored as a long.
In the setting menu - when the positive button is pressed
SharedPreferences preferences = context.getSharedPreferences("TIME", Context.MODE_PRIVATE);
SharedPreferences pref = context.getSharedPreferences(
"any_prefname", Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putLong("key_name", 8);
editor.commit();
In the fragment:
SharedPreferences pref = getActivity().getSharedPreferences(
"any_prefname", Context.MODE_PRIVATE);
Long longValue = pref.getLong("key_name", 0);
Toast.makeText(getActivity(), "Hi " + longValue, Toast.LENGTH_SHORT).show();
The problem is that the value "8" that I saved is note being shown in the toast from the fragment. The value being used is the 0.
Thank you
You aren't using the same key. When saving you used "time", when loading you used "key_name". You need to use 1 name.
I am using Android 2.1 sdk and I am trying to save user loggin session in to Shared preferences, the thing is after saving the value to the shared preference I am unable to retrive it. Here I am pasting the code I used to save and fetch value from SharedPrefrence.
public void setValue(String name, String value, String prefName) {
sharedPref = mContext.getSharedPreferences(prefName, Context.MODE_PRIVATE);
sharedPref.edit().putString(name, value);
sharedPref.edit().commit();
}
public String getValue(String name, String prefName) {
String value = null;
sharedPref = mContext.getSharedPreferences(prefName, Context.MODE_PRIVATE);
value = sharedPref.getString(name, value);
return value;
}
Did i miss some thing in this code, I am not retrieving any exceptions while saving and retrieving the value. Thanks for any help.
Every call to edit() returns you a new Editor instance. So you get an instance, make a change and leave it alone. Then you get a second one and commit that without changes, which results in no value changes in the preferences.
Rather chain in the commit():
sharedPref.edit().putString(name, value).commit();
Alternatively break it up into multiple lines with one specific instance:
Editor e = sharedPref.edit();
e.putString(name, value);
e.commit();
private SharedPreferences myPrefs;
myPrefs = Actionactivity.this.getSharedPreferences("myPrefs", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("Mobile_no", getText_no.getText().toString().trim());
prefsEditor.commit();
myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
myPrefs.getString("Mobile_no", "");
try this one code work