2011-09-20 9 views

Odpowiedz

38

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); 
+8

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 –

+0

MODE_PRIVATE nie może być rozwiązany dla zmiennej – Prasad

+1

Moje działanie nie pozwala na 'this' w moim innym konstruktorze klasy (klasie z' SharedPreferences'). – Azurespot

2

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.

+0

można rozwinąć? Próbowałem 'SharedPreferences prefs = getDefaultSharedPreferences (this);' ale to nie działa. –

+0

Rozszerzyłem moją odpowiedź. –

+0

Użyj 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' bez względu na to gdzie jesteś w kodzie, wymaga kontekstu do używania Preferencji. –

39

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.

+4

To użyteczne obejście, sugeruję użycie contextOfApplication jako pola prywatnego. – FredMaggiowski

+0

Można również użyć applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –

0

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 :)

1

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(); 
} 
} 
0

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(); 
    }