Я бы сделал то, что говорит lenik, но не делал бы их статичными, вместо этого ленив их инициализировать.
public class MyApplication extends Application {
public SharedPreferences preferences;
public SharedPreferences getSharedPrefs(){
if(preferences == null){
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
}
return preferences;
}
Тогда на ваш взгляд:
MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
Как говорит Эрик, этот класс приложения должен быть объявлен в вашем манифесте:
<application android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
Ссылка:
getApplicationContext()
Глобальные переменные Android
изменить
(Из вашего комментария) проблема в том, что вы на самом деле не сохраняете никаких данных, эта строка не имеет смысла, вы на самом деле не сохраняете переменную:
editor.putString("Data", (Data));
Вот пример вышеизложенного в использовании:
MyApplication app = (MyApplication) getContext().getApplicationContext();
SharedPreferences settings = app.getSharedPrefs();
String str = settings.getString("YourKey", null);
И чтобы сохранить что-то в настройках:
settings.edit().putString("YourKey", "valueToSave").commit();
Более конкретным примером использования в пользовательском представлении может быть:
public class MyView extends View {
SharedPreferences settings;
// Other constructors that you may use also need the init() method
public MyView(Context context){
super(context);
init();
}
private void init(){
MyApplication app = (MyApplication) getContext().getApplicationContext();
settings = app.getSharedPrefs();
}
private void someMethod(){ // or onTouch() etc
settings.edit().putString("YourKey", "valueToSave").commit(); //Save your data
}
private void someOtherMethod(){
String str = settings.getString("YourKey", null); //Retrieve your data
}
}
person
Blundell
schedule
18.05.2012