Jeżeli mamy nie duży zbiór wartości których nie chcemy zapisywać w bazie danych możemy skorzystać z API SharedPreferences. W przypadku aplikacji konkursowej te wartości posłużą do ustalenia czy użytkownik może odhaczyć wykonanie nawyku czy też powinien poczekać do następnego dnia.

Najpierw logika

Zanim zaczniemy, słów kilka o logice która będzie kierowała aplikacją. Przy tworzeniu nawyku utworzymy w SharedPreferences wartość isFirstTime która będzie mówiła czy mamy sprawdzać datę. Przy aktualizacji nawyku, czyli po kliknięciu przycisku, sprawdzimy czy obecna data jest inna od daty zachowanej w SharedPreferences. Cały algorytm będzie się prezentował mniej więcej tak:

Warto również zapisać klucze w strings.xml, zapobiegnie do powstaniu trudnych do wykrycia błędów.

 Zapisywanie w SharedPreferences

Do klasy odpowiedzialnej za dodawanie nowych nawyków do bazy, opisanej tutaj, dodamy nowe metody. Pierwsza z nich po prostu wygeneruje unikatowy klucz którego użyjemy do późniejszej logiki.

Druga, zdecydowanie ciekawsze odpowiedzialna jest za dodawanie nowych wartości do SharedPreferences. W pierwszej kolejności tworzymy nowy obiekt SharedPreferences. W konstruktorze podajemy unikalny klucz i tryb (w tym wypadku Context.MODE_PRIVATE, który sprawi że SharedPreferences będą dostępne tylko z poziomu naszej aplikacji). Następnie tworzymy Editor czyli interfejs służący do wprowadzania i modyfikowania danych do SahredPreferences. Potrzebujemy tylko jednej informacji więc dodajemy ją metodą putBoolean(). Warto zaznaczyć że zmiany nie są wprowadzane aż do wywołania na edytorze metody commit() lub apply().

Odczyt z SharedPreferences

Podobnie jak przy zapisie tworzymy nowe obiekty SharedPreferences. Do odczytu nie jest jednak potrzebny Editor. Możemy odczytać wartości za pomocą metod takich jak getString()getInt() itd. W tym wypadku jednak tworzymy Editor gdyż potrzebny jest on do dodania dzisiejszej daty do SharedPreferences.

 

Podziel się z innymi!Share on Facebook
Facebook
Share on Google+
Google+
Tweet about this on Twitter
Twitter