Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Przesyłanie własnego obiektu między Aktywnościami w Androidzie

Ostatnio opisywałem na blogu w jaki sposób możemy przesyłać dowolne dane między aktywnościami w Androidzie. W artykule tym zaznaczyłem jednak, że mechanizm ten działa tylko dla określonych typów obiektów. W większości przypadków jest to w zupełności wystarczające, co jednak jeśli nasza aplikacja wykorzystuje do swojego działania sporo różnych informacji? Raczej w takim przypadku kiepskim pomysłem będzie dodawanie x pól i przesyłanie ich pojedynczo, skoro można to ładnie opakować w jedną klasę i tylko ją przesłać. Problem w tym, że opisywany mechanizm przesłania danych między poszczególnymi oknami w aplikacji nie umożliwia nam wysłania własnego obiektu. Oczywiście można to w prosty sposób ominąć, zobaczmy więc jak…

Fot: Kham Tran, CC BY 2.0.

Fot: Kham Tran, CC BY 2.0.

Parsowanie

Cała sztuczka opiera się na jednej prostej zasadzie, każdy obiekt jaki utworzymy w naszej aplikacji mobilnej możemy sparsować do formatu tekstowego, a następnie z powrotem do postaci pierwotnej. Jak pewnie się domyślacie, obiekty typu String można przesyłać między aktywnościami bez większego problemu. Pewnym kłopotem może więc być sparsowanie naszej klasy do postaci tekstowej ale tutaj z pomocą przychodzą nam odpowiednie biblioteki.

Gson

Gson jest opensource’ową biblioteką stworzoną przez programistów Google, która umożliwia nam parsowanie dowolnego obiektu w Javie do postaci tekstowej – json’a oraz z json’a do postaci pierwotnej. Jak nie trudno się domyślić, to załatwi nam całą sprawę z przysłaniem danych między aktywnościami.

Aby wykorzystać bibliotekę Gson w naszym projekcie najpierw należy ją zaimportować. W tym celu przechodzimy do głównego menu w Android Studio i wybieramy opcję „Build” oraz z rozwijanej listy „Edit Libraries and Dependencies…„:

dodawanie-biblioteki-1

Następnie przechodzimy do zakładki „Dependencies” oraz klikamy na „plusa” znajdującego się w lewym dolnym rogu okna:

dodawanie-biblioteki-2

Z rozwiniętej listy wybieramy „Library dependency„:

dodawanie-biblioteki-3

Następnie wpisujemy w wyszukiwarkę frazę „gson„:

dodawanie-biblioteki-4

Odnajdujemy odpowiednią pozycję na liście („com.google.code.gson:gson:x.x„) i klikamy przycisk „OK„. Biblioteka Gson zostanie automatycznie dołączona do projektu:

dodawanie-biblioteki-5

Teraz wracamy z powrotem do naszego projektu, klikając przycisk „OK„.

Przesyłanie danych

Załóżmy, że mamy klasę o nazwie na przykład: GameData. Jest to obiekt, który stworzyliśmy na potrzeby naszej aplikacji i przechowujemy w nim jakieś dane, z których korzysta nasz program. Aby przesłać ten obiekt do drugiej aktywności musimy go sparsować do postaci tekstowej czyli json’a. Zrobimy to tak:

Jako argument statycznej metody toJson() obiektu Gson() podajemy obiekt naszej klasy (GameData): gameData (GameData gameData = new GameData()). Wszystko to zapisujemy do zmiennej typu String, którą następnie przesyłamy do nowej aktywności, metodą opisaną w artykule „Przesyłanie danych między Aktywnościami w Androidzie„:

Odczyt danych

Przesłaną klasę w formacie tekstowym odczytujemy w normalny sposób (podany w artykule „Przesyłanie danych między Aktywnościami w Androidzie„):

My jednak potrzebujemy z powrotem nasz obiekt, więc musimy ponownie sparsować tym razem json’a do postaci pierwotnej czyli naszej klasy. W tym celu wykorzystamy metodę fromJson(), gdzie jako pierwszy argument podajemy zmienną w której zapisaliśmy json’a, a jako drugi argument naszą klasę w formacie: NazwaKlasy.class:

Nasz obiekt jest już dostępny w kolejnej aktywności. Możemy bez problemu skorzystać ze wszystkich jego właściwości.

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , ,

Dodaj komentarz

guest
6 Komentarzy
Najstarsze
Najnowsze Najlepiej oceniane
Inline Feedbacks
View all comments
Damian Uziębło
Damian Uziębło
30 września 2016 19:31

Mały błąd w artykule.
Przy przesłaniu obiektu z jednej aktywności do drugiej aktywności poniższy fragment kodu:

String json = new Gson().toJson(GameData.class);
Nie zadziała. Zamiast GameData.class trzeba wpisać nazwę zmiennej obiektowej która używa tej klasy.

lukas124
30 września 2016 20:20

Faktycznie, to co napisałem nawet nie ma sensu. Dzięki za uwagę ;) Poprawię to jak tylko będę miał dostęp do komputera.

Krystian
Krystian
10 października 2016 21:16

Jest to dosyć dobra inicjatywa bo nie wymaga przesyłania całego kodu w pojedynczych klasach a jedynie jednej klasy która jest opakowana w to. z kursów na androida to na eduweb.pl są dosyć spoko opisane.

Bober Jakub
Bober Jakub
18 listopada 2019 15:40

A jak zapisać te nowe dane w teh drugiej aktywności aby były dostępne w pierwszej aktywności?

lukas124
18 listopada 2019 23:27
Reply to  Bober Jakub

Chcesz zapisać dane z pierwszej aktywności w drugiej? Masz do nich normalnie dostęp z poziomu zmiennych więc możesz robić co chcesz.

Pawel Kurzawa
Pawel Kurzawa
5 stycznia 2020 22:54

Dziękuję, ależ to ułatwienie :)

Pin It on Pinterest