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:

String json = new Gson().toJson(gameData);

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„:

String json = new Gson().toJson(gameData);  
                                                  
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("name", json);                         
startActivity(i);

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„):

String name = getIntent().getStringExtra("name");

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:

GameData gameData = new Gson().fromJson(name, GameData.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

Komentarze (6)

  • Damian Uziębło pisze:

    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.

  • Krystian pisze:

    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 pisze:

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

  • Pawel Kurzawa pisze:

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

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest