Jak korzystać z SharedPreferences w klasie innej niż aktywność? Próbowałem utworzyć ogólną klasę użyteczności Preferences i importować android.content.Context
, ale Eclipse nadal nie pozwala mi używać getSharedPreferences()
.Android - Jak korzystać z SharedPreferences w klasie non-Activity?
Odpowiedz
Udostępnione informacje dotyczą kontekstu. Możesz odwoływać się do niego tylko przez kontekst.
Możesz po prostu przekazać kontekst jako parametr swojej klasie. Na przykład w konstruktorze.
W swojej działalności zrobić:
MyClass myClass = new MyClass(this);
Spróbuj użyć default preferences w kontekście aplikacji. Kontekst jest podobny do środowiska, w którym aplikacja działa w systemie Linux lub Windows (np. Zmienne środowiskowe, takie jak styl okna PATH lub rozmiar konsoli). Każde działanie i usługa ma swój własny kontekst, na przykład orientację ekranu, motyw i etykietę itp., Ale dla aplikacji nie chcesz kontekstu działania, chcesz coś globalnego do aplikacji, tutaj jest użyteczne context.getApplicationContext() . To samo w całej aplikacji i zawsze da ci takie same domyślne preferencje.
można rozwinąć? Próbowałem 'SharedPreferences prefs = getDefaultSharedPreferences (this);' ale to nie działa. –
Rozszerzyłem moją odpowiedź. –
Użyj 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' bez względu na to gdzie jesteś w kodzie, wymaga kontekstu do używania Preferencji. –
Rozwiązanie znalazłem do tego było:
1-W klasie główną działalność (czyli zawsze rozpocząć przed uzyskaniem jakiejkolwiek kontekst projektu) utworzyć zmienną statyczną dla Kontekscie
public static Context contextOfApplication;
2 w metodzie Ważne tej klasy (takie jak, konstruktora onCreate itp) initi alize zmienna przy zastosowaniu metody getApplicationContext:
public void onCreate() {
contextOfApplication = getApplicationContext();
}
3 w tej samej klasy Tworzenie „getter” metody dla tej zmiennej (musi być także statyczne):
public static Context getContextOfApplication(){
return contextOfApplication;
}
4 w non Klasa -activity pobiera kontekst, wywołując statycznie utworzoną metodę:
Context applicationContext = MyActivityClass.getContextOfApplication()
;
5-użyć klasy PreferenceManager aby uzyskać zmienną SharedPreferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
nadzieję, że to pomaga.
To użyteczne obejście, sugeruję użycie contextOfApplication jako pola prywatnego. – FredMaggiowski
Można również użyć applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –
Najpierw zadeklaruj w swojej klasie atrybut prywatny. W moim przypadku mam klasy BaseAdapter:
private final Context ctx;
private final Vector<Acto> actos;
public ActoAdaptador(Context ctx, Vector<Acto> as) {
super();
this.ctx = ctx;
this.actos = as;
}
potem, kiedy używać SharedPreferences:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
ten sposób działa na mnie przynajmniej :)
korzystanie ten kod do nowa klasa.
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by Atiar Talukdar on 6/5/2017.
*/
public class TemporaryStorageSharedPreference {
protected final static int DEFAULT = 0;
int temp = 0;
public int readSharedPreference(Context context, String spName,String key){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
return temp = sharedPreferences.getInt(key,DEFAULT);
}
public void writeSharedPreference(Context context,String ammount,String spName,String key){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, DEFAULT);
editor.commit();
}
}
tworzyć SharedPreferences klasę
/**
* @param mContext
* @param key
* @param value
*/
public static void savePreferences(Context mContext, String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
/**
* @param context
* @param keyValue
* @return
*/
public static String getPreferences(Context context, String keyValue) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString(keyValue, "");
}
/**
* @param mContext
*/
public static void removeAllSharedPreferences(Context mContext) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
Aha! Właśnie tego szukałem. Dzięki za prostą i jasną odpowiedź. Teraz mogę uzyskać do niego dostęp za pomocą 'context.getSharedPreferences();'. Błąd –
MODE_PRIVATE nie może być rozwiązany dla zmiennej – Prasad
Moje działanie nie pozwala na 'this' w moim innym konstruktorze klasy (klasie z' SharedPreferences'). – Azurespot