Android
2020-12-19
Kliknij tutaj i otrzymaj kurs "Room w Android" w promocyjnej cenie 30 zł do 31 grudnia 2020!
Dla tych, którzy z pojęciem "timestamp" spotykają się pierwszy raz, szybko tłumaczę.
Jest to taka pieczątka obecnej daty i czasu. Do zapamiętania: w wielu językach otrzymasz ją poprzez wywołanie w kodzie czegoś podobnego: Date().now()
🤓.
Jeżeli chodzi o to jak timestamp może wyglądać, to zwykle mamy trzy typy danych:
Jak można zobaczyć każdy z typów w jakiś sposób określa zapis daty. W momencie konwersji jednak problemy mogą powodować: format, czas lokalny, precyzja.
Specyfika bazy danych SQLite na Androidzie pozwoli nam na zapisanie jedynie typów prymitywnych t.j. String i Long.
Przy czym tutaj do rozważenia są dwie kwestie: 1. Typ Long jest bardziej dokładny i uniwersalny 2. Typ String może zostać wygenerowany przez Room automatycznie
Generalnie zalecałbym w aplikacjach produkcyjnych skorzystanie jednak z typu Long jako, że jest on najbardziej podatny na interpretacje na wielu różnych platformach 😇 i nie wymaga określania lokalnego formatu daty w aplikacji.
Niestety automatyczne generowanie timestamp wymaga od nas obsługi typu String. I ja dla przykładu skorzystam właśnie z niego.
Aby w tabeli określić daną kolumnę, ale nie podawać jej wartości w trakcie działania programu, musimy określić adnotację @ColumnInfo z wartością domyślną.
W konstruktorze omijamy dane dla dwóch kolumn: image i timestamp.
Dla image ponieważ nie chcemy mieć tej kolumny w bazie. A dla timestamp ponieważ zostanie automatycznie dodane przez Room 😎.
CURRENT_TIMESTAMP to po prostu jedna z SQLite'owych stałych, które Room rozumie i pozwala używać jako wartości.
W aplikacji najwygodniej byłoby zadeklarować jednak pole timestamp jako obiekt daty czyli Date.
W tym przypadku możemy zawsze przy wyciąganiu tekstu daty konwertować ją na obiekt daty. Albo pozwolić, żeby Room robił to za nas 😏.
W tym celu trzeba napisać konwerter typu. Aby działanie było wygodne najlepiej zrobić do w obu kierunkach. Date -> String i String -> Date.
Następnie do pola w klasie dodajemy adnotację @TypeConverters, gdzie jako value wskazujemy nasz konwerter.
I gotowe! 🙌 Kod można użyć ponownie w wielu tabelach i nie wymaga to od nas żadnego dodatkowego wysiłku.
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.