Accessing SharedPreferences through static methods
Cristian's answer is good, but if you want to be able to access your shared preferences from everywhere the right way would be:
- Create a subclass of
Application
, e.g.public class MyApp extends Application {
... - Set the
android:name
attribute of your<application>
tag in the AndroidManifest.xml to point to your new class, e.g.android:name="MyApp"
(so the class is recognized by Android) - In the onCreate() method of your app instance, save your context (e.g.
this
) to a static field namedapp
and create a static method that returns this field, e.g.getApp()
. You then can use this method later to get a context of your application and therefore get your shared preferences. :-)
That's because in this case, act
is an object that you just create. You have to let Android do that for you; getSharedPreferences()
is a method of Context
, (Activity
, Service
and other classes extends from Context
). So, you have to make your choice:
If the method is inside an activity or other kind of context:
getApplicationContext().getSharedPreferences("foo", 0);
If the method is outside an activity or other kind of context:
// you have to pass the context to it. In your case: // this is inside a public class public static SharedPreferences getSharedPreferences (Context ctxt) { return ctxt.getSharedPreferences("FILE", 0); } // and, this is in your activity YourClass.this.getSharedPreferences(YourClass.this.getApplicationContext());
I had a similar problem and I solved it by simply passing the current context to the static function:
public static void LoadData(Context context)
{
SharedPreferences SaveData = context.getSharedPreferences(FILENAME, MODE_PRIVATE);
Variable = SaveData.getInt("Variable", 0);
Variable1 = SaveData.getInt("Variable1", 0);
Variable2 = SaveData.getInt("Variable2", 0);
}
Since you are calling from outside of an activity, you'll need to save the context:
public static Context context;
And inside OnCreate:
context = this;
Storing the context as a static variable, can cause problems because when the class is destroyed so are the static variables. This sometimes happens when the app is interrupted and becomes low on memory. Just make sure that the context is always set before you attempt to use it even when the class setting the context is randomly destroyed.