Podejdę do tego problemu z zupełnie innej strony.
Istnieje kilka alternatywnych sposobów radzenia sobie z tym.
To, co robię, to kiedy program jest uruchamiany, I inicjalizuję moją wspólną wartość preferencji na wartość testową dla mnie, aby sprawdzić, czy została zmieniona .
np
editor.putInt("key", -1);
Następnie w działalności, w których jestem pobierania wartość preferencji:
int mySavedInt = this.pref.getInt("key", howIgetMyInt)
if(mySavedInt==-1){
// I know it's not my saved int :) and hasn't been set.
}
Albo faktycznie wykorzystać wspólną samą preferencję do ustalenia, czy wspólne preferencje ty próby sprawdzania poprawności zostały zaktualizowane.
np.
String getStatus = pref.getString("checkMySharedPreferences", "nil");
if (getStatus.equals("true")) {
// DO something.
} else {
Toast.makeText(this, "Set your preferences",
Toast.LENGTH_SHORT).show();
}
Następnie po ustawieniu udostępnionych preferencji można ustawić tę wartość na „true”:
editor.putString("checkMySharedPreferences", "true");
editor.commit();
Kolejna propozycja jest zapewnienie przed aktualizacją udostępnionych preferencje sprawdzania poprawności danych. W ten sposób współdzielone ustawienia nie zostaną ustawione, jeśli dane nie są prawidłowe.
if(my data is valid){
my shared preferences
commit
}
Ostateczna propozycja jest zrobić test cykliczny (jak jesteś niepewny w procesie), a gdy pojawi się dane dla współdzielonych preferencji i zobowiązać go. Sprawdź, czy dane wejściowe użytkownika są równe nowym udostępnionym preferencjom. Chociaż nie uważam tego za konieczne.
I aby rejestrować te zdarzenia, po prostu dodawaj do nich linie dziennika w stosownych przypadkach.
Poza tym, nie wydaje mi się, że dobrym zwyczajem jest zgłaszanie wyjątków, jeśli nie są ustawione, uważam, że zarządzanie przepływem programu może być lepiej obsługiwane za pomocą instrukcji warunkowych, w których oczywiste jest, że będzie błąd runtime
. Zapisz obsługę błędów podczas sprawdzania poprawności danych wprowadzanych przez użytkownika.
Zwraca wartość true, jeśli nowe wartości zostały pomyślnie zapisane w pamięci trwałej. Sprawdź: http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit() –
i myślę, że zwróci false, gdy plik jest uszkodzony lub problem z I/O .. ale te problemy występują bardzo rzadko ... – Moinkhan
rozważ, czy zmienisz typ danych dla klucza w pewnym momencie. Z pewnością zwróci false. – Randroid