getSharedPreferences() potrzebuje kontekstu, do którego można uzyskać dostęp.
Na przykład:
mContext.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
Trzeba też zdać kontekst do konstruktora dla KeyValueDB lub lepszym sposobem byłoby aby uzyskać dostęp do statycznie.
zrobiłbym to
public class KeyValueDB {
private SharedPreferences sharedPreferences;
private static String PREF_NAME = "prefs";
public KeyValueDB() {
// Blank
}
private static SharedPreferences getPrefs(Context context) {
return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
public static String getUsername(Context context) {
return getPrefs(context).getString("username_key", "default_username");
}
public static void setUsername(Context context, String input) {
SharedPreferences.Editor editor = getPrefs(context).edit();
editor.putString("username_key", input);
editor.commit();
}
}
Wystarczy powtórzyć te metody get i set dla wszelkich informacji potrzebnych do przechowywania.
Aby uzyskać do nich dostęp z działalności, by to zrobić:
String username = KeyValueDB.getUsername(this);
gdzie "to" jest odniesieniem do działania. Jest to również dobra praktyka, aby skonfigurować kontekst, w każdej działalności w sposób onCreate(), takich jak:
public class myActivity extends Activity{
Context mContext;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
String username = KeyValueDB.getUsername(mContext);
}
EDIT lipca 2016
w odpowiedzi na @RishirajPurohit poniżej, aby ustawić nazwę użytkownika robisz bardzo dużo samo:
KeyValueDB.setUsername(mContext, "DesiredUsername");
Stamtąd wszystko odbywa się dla Ciebie w poprzedniej klasie statycznej, zmiana jest zobowiązana do pliku udostępnionego preferencji i utrzymywały i gotowy do być pobierane metodą gET.
Tylko uwaga na metody GET, w przypadku gdy ktoś zastanawia się:
public static String getUsername(Context context) {
return getPrefs(context).getString("username_key", "default_username");
}
"default_username" jest dokładnie tak, jak to brzmi. Jeśli ta metoda get jest wywoływana jako pierwsza przed ustawieniem nazwy użytkownika, jest to zwracana wartość. Mniej przydatne w tym przypadku, ale gdy zaczniesz używać liczb całkowitych i wartości boolowskich, jest to bardzo przydatne dla zapewnienia niezawodności.
Potrzebujesz obiektu Context dla instancji SharedPreferences: http://developer.android.com/reference/android/content/Context.html#getSharedPreferences%28java.lang.String,%20int%29 – Benjamin