Vikram
Vikram

Reputation: 85

Shared Preference returns always the default value

Here is code I am Using to create and store value in Preference. outgoing is String variable.

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();                
editor.putString("PhoneNo","Hi");
editor.commit();

Here is the code to get value from SharedPreference.

SharedPreferences sp 
=getSharedPreferences(outgoing,Activity.MODE_PRIVATE);
String calln = sp.getString("PhoneNo","0");
Toast.makeText(mContext, "SHARED"+calln,Toast.LENGTH_LONG).show();

Upvotes: 5

Views: 3728

Answers (4)

Suragch
Suragch

Reputation: 511606

The most likely reason that Shared Preference always returns the default value is that you saved the value in one preference file and then tried to retrieve it in another preference file. This can happen if you do call getPreferences() from different Activities, because getPreferences() creates a different preference file based on the activity it is created in.

Solution

The easiest solution is to always get your shared preferences like this:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);

This will use a single preference file for the entire app.

Alternate solution

If for some reason you need to use different preference files, then you can do

final static String PREF_FILE_1 = "pref_file_1";
...
SharedPreferences sharedPref = context.getSharedPreferences(PREF_FILE_1, Context.MODE_PRIVATE);

Just make sure you always use the right file name for the preferences you are trying to save and retrieve.

Local preferences

If you really only need a preference for a specific Activity, then you can use getPreferences(Context.MODE_PRIVATE). Just don't expect to be able to retrieve the values from another Activity in the same way.

See also

Upvotes: 2

gilonm
gilonm

Reputation: 1859

When putting values, try changing this:

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

to this:

SharedPreferences sp = getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

Same when getting values - don't forget to add getApplicationContext() in your call to SharedPreferences

EDIT: Check that your "outgoing" String is the exact same in both Activities

Upvotes: 1

nem035
nem035

Reputation: 35481

You should probably call the getSharedPreferences on the context from which you are accessing them.

Source

Therefore, depending on how you can access your context, if you pass it to some other activity or in an asynchronous task, here are some examples of usage:

this.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

context.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

Also, one way you can test your stuff is to use a listener when SharedPreferences get changed:

onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)

Called when a shared preference is changed, added, or removed.

here is how to do that

You can also use the Preference Manager to obtain the SharedPreferences:

PreferenceManager.getSharedPreferences(YOUR_CONTEXT).getString(
                    "PhoneNo", "0");

Or to store them:

PreferenceManager.getSharedPreferences(YOUR_CONTEXT).edit().putString(
                    "PhoneNo", "Hi").commit();

Upvotes: 6

Techfist
Techfist

Reputation: 4344

change this Activity.MODE_PRIVATE to this Activity.MODE_MULTI_PROCESS, issue is probably due to different context during storing value and accessing value.

Upvotes: 1

Related Questions