7

I want to store and retrieve data that is accessible to all activities in my app using SharedPreferences. Is that possible? Up until now I have been doing it such that the data is stored for a particular activity.

Goo
  • 1,318
  • 1
  • 13
  • 31
Johann
  • 27,536
  • 39
  • 165
  • 279
  • You can also use the default preference file, see [this](http://stackoverflow.com/questions/2614719/how-do-i-get-the-sharedpreferences-from-a-preferenceactivity-in-android) – dmon Jun 29 '12 at 15:10

5 Answers5

9

Yes. SharePreferences do exactly this. In every activity you can this:

SharedPreferences prefs = getSharedPreferences(ApplicationConstants.PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(name, value);
editor.commit();

And then retrieve values in other activty doing this:

mPrefs.getString(name, "");

This is the documentation: http://developer.android.com/reference/android/content/SharedPreferences.html

And this is a good example to start with:

http://myandroidsolutions.blogspot.it/2012/03/android-preferenceactivity.html

Stefano Ortisi
  • 5,288
  • 3
  • 33
  • 41
  • really helpfull thnx :) – Neo Morina May 03 '17 at 11:19
  • This seems useful, but is it up to date? I wonder what "ApplicationConstants" is, and I cannot find any information about it in the documentation. Also, the good example in that blog is gone. It makes sense though, I realize answer was given 5 years ago. – Zerato Oct 03 '17 at 20:21
  • ApplicationConstants would be a constant defined in the constants file in app or there is a java class named ApplicationConstants , you can simply pass a string there but make sure the string is same everywhere you use it. – Rishiraj Purohit Apr 05 '18 at 01:23
2

Yes, that's the whole purpose of it.

Here's how you should write to it, via Editor

    final SharedPreferences shp         = ctx.getSharedPreferences(ctx.getString(R.string.app_name), Context.MODE_PRIVATE);
    final SharedPreferences.Editor ed   = shp.edit(); 
    ed.putString("var1", "var1");
    ed.putString("var2", "var2");

And to load it:

shp.getString("var1", "defvalue");
nullpotent
  • 9,162
  • 1
  • 31
  • 42
2

I have a better version. As sometimes when you try to do getSharedPreferences you might get an error as it could not be found. This is how I store values in my Android projects.

Add

SharedPreferences sharedPreferences=this.getSharedPreferences("packagename", Context.MODE_PRIVATE);

 sharedPreferences.edit().putString("username", "specify name here").apply();

Package Name can be directly copied from top of the activity ex: com.example.name.projectname

Retrieve

String username = sharedPreferences.getString("username","");
1

If you want to access values in all of your activities I think the better way is storing in a custom Application class and later in activities you can:

((CustomApplication)getApplication()).getStoredValue()

Shared preferences are stored in files and this file access is slower.

PaNaVTEC
  • 2,505
  • 1
  • 23
  • 36
0

Is my example for create function for set and get an object data called "USER"

For set sharePreference data

public void saveUser(User usuario) {
        SharedPreferences sharedPref = getSharedPreferences("A", Context.MODE_PRIVATE); // sharedpreference set named "A"

        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("name", usuario.getNombre());
        editor.putString("username", usuario.getUsername());
        editor.putString("pass", usuario.getContrasena());
        editor.putString("roll",usuario.getRol());
        editor.commit();
    }

For get sharePreference data

public Usuario getUser() {
        SharedPreferences sharedPref = getSharedPreferences("A", Context.MODE_PRIVATE);   // sharedpreference set named "A"
        User usuario = new User();
        usuario.setNombre(sharedPref.getString("name", "null"));
        usuario.setUsername(sharedPref.getString("username", "null"));
        usuario.setContrasena(sharedPref.getString("pass", "null"));
        usuario.setRol(sharedPref.getString("roll", "null"));
        return usuario;
    }

Important: set name to sharePreference in this case "A"