Lista ogłoszeń w aplikacji Mobile Second Hand – cz. 2.

Siemanko.

Dziś druga część informacji na temat listy ogłoszeń w aplikacji mobilnej. Z poprzedniej części dowiedzieliście się, że skorzystałem z Fragment (List) – template’u  wbudowanego w Android Studio do generowania listy elementów widoku – który przerobiłem po swojemu. W tej części o tym jak go dostosowałem do swoich potrzeb.

Pobieranie ogłoszeń.

W metodzie onCreateView() activity (klasy) AdvertisementItemFragment będącej fragmentem (pojedyńczym elementem listy czyli ogłoszeniem) następuje wywołanie metody getAdvertisements(). Metoda ta, wywołuje serwis do pobierania ogłoszeń przekazując jego metodzie model ze współrzędnymi lokalizacji telefonu, z którego jest wysyłany request (o pobieraniu lokalizacji w następnym poście). Po co wysyłam współrzędne? To jest właśnie główny pomysł na tę aplikację – kojarzenie ze sobą ludzi w celu wymiany/sprzedaży ubrań w zadeklarowanym przez nich samych obszarze :). Wspomniany serwis z wykorzystaniem biblioteki Android Asynchronous Http Client (opisałem ją krótko w tym poście) uderza do WebApi w Asp.Net. W odpowiedzi dostaję jsona z listą ogłoszeń. Przy pomocy biblioteki Gson (którą również opisałem krótko w tym poście) parsuje stringi na javove obiekty ogłoszeń.

1

Parsowanie odpowiedzi (jsona) na obiekty javove z wykorzystaniem Gson.

Skrócony model ogłoszenia.

Aby nie pobierać całych ogłoszeń ze wszystkimi danymi, których i tak nie byłoby gdzie wyświetlić na liście (przy zachowaniu przejrzystości), zrobiłem skrócony model ogłoszenia do obsługi listy ogłoszeń.

2

Model ogłoszenia do wyświetlania na liście ogłoszeń

Modelu chyba nie muszę tłumaczyć poza polem Distance – jest to przybliżona odległość między użytkownikiem przeglądającym ogłoszenie, a autorem ogłoszenia w momencie jego utworzenia (wyliczona na serwerze). Zdjęcie przysyłam jako tablice bajtów (główne zdjęcia ogłoszeń, które mają być tzw. miniaturkami zmniejszam na serwerze w momencie zapisywania nowego ogłoszenia) i tu mam dla Was tipa co byście się nie musieli frustrować tak jak ja. Przy korzystaniu z Gsona’a do parsowania tablicy bajtów z jsona na obiekt javovy należy zadbać o to aby przy zwracaniu odpowiedzi z WebApi w Asp.Net skorzystać z JavaScriptSerializer i dane z kontrolera wypuścić jako string. Tablica bajtów zwracana przez wbudowany w Asp.Net Core 1.0 WebApi parser danych do jsona jest interpretowana (po stronie Androida) przez Gson jako ciąg znaków (string), a nie tablica bajtów.

Tak przygotowaną listę obiektów ładuję do ViewAdpatera.

3

Parsowanie odpowiedzi w formacie json na listę obiektów javovych oraz ustawianie ViewAdaptera .

Obsługa ViewAdaptera i customowy infinite scroll

ViewAdapter jest odpowiedzialny za wyświetlanie fragmentów. W metodzie onBindViewHolder(), która jest wywoływana tuż przed każdym wyświetleniem fragmentu, ustawiam wartości poszczególnych kontrolek widoku fragmentu odpowiednimi wartościami z modelu ogłoszenia.

4

Bindowanie danych z modelu ogłoszeń do kontrolek widoku fragmentu.

Holder to kasa, która trzyma referencje do kontrolek znajdujących się na widoku fragmentu. Jeden fragment na liście – jeden holder. Na powyższym screenie tuż przed zamykającym nawiasem klamrowym widać wywołanie metody:

checkIfThisItemIsLastAndRaiseOnInfinityScroll(holder, position)

Jest to mój pomysł na infinite scroll. W metodzie tej, sprawdzam index bindowanego obiektu ogłoszenia i porównuje go z długością listy wszystkich obiektów aktualnie znajdujących się w ViewAdapter’ze. Jeśli index jest ostatni to wywołuje odpowiednią metodę listenera, która odpala pobieranie danych.

5

Moja implementacji infinite scroll’a w ViewAdapterze.

Jak widać, zmienne lastHolder i lastPosition przechowują dane ostatnich elementów przed wywołaniem infinite scrolla, w celu doklejenia nowych danych do istniejącej listy bez zmiany widoku.

Screenshot_2016-03-23-18-16-03.png

Po doładowaniu danych użytkownik przegląda listę dalej od tego samego miejsca, w którym zaczęło się doładowywanie. Oczywiście będę musiał dopisać jakąś logikę dotyczącą pobierania danych wywołanych przez zdarzenia infinite scroll’a (jakiś paging itp.), ale to przecież się wciągnie noskiem 🙂

W następnej i ostatniej części opiszę co nieco jak ustalam lokalizację oraz jak ładuję fotkę z tablicy bajtów na widok.

Także Stej In Tacz!

Pjona!

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s