Stosowanie usług sieciowych (Web Services) z poziomu Androida

Stosowanie usług sieciowych (Web Services) z poziomu Androida

Web Services możemy stosować w Androidzie tak jak w każdym innym programie napisanym w Javie, z tą różnicą że tutaj musimy pamiętać o kilku dodatkowych wymogach. Ponieważ stosowanie z usług sieciowych wiąże się z korzystaniem z sieci (jak sama nazwa wskazuje :) ), musimy zadbać o odpowiednie uprawnienia aplikacji. Z tego tytułu dodajemy wpis :

 

<uses-permission android:name="android.permission.INTERNET" />

po tagu a przed . Jest jeszcze jedna bardzo ważna sprawa – jeśli chcemy korzystać w aplikacji z usług sieciowych, musimy to robić w osobnym wątku. Jeśli o tym zapomnimy, Android i tak nam o tym przypomni rzucając na konsolę komunikat :

StrictMode$AndroidBlockGuardPolicy

Ja zrobiłem to przy użyciu osobnej klasy dziedziczącej po AsyncTask, choć jeśli chcesz możesz zastosować zwyczajny obiekt klasy Thread. Na poniższej ilustracji zczytałem zawartość naszej strony internetowej i wyświetiłem ją na konsoli.

 

 

 

Wynik wyświetlony na konsoli:

To jest po prostu kod źródłowy strony internetowej, choć równie dobrze mógłby to być jakiś plik z danymi w XML.

Alternatywnie możemy wykorzystać gotową bibliotekę HttpClient od Apache, dzięki której nie musimy skupiać się tak bardzo na szczegółach implementacji czytania strumienia. Efekt jest zasadniczo taki sam, forma inna. Tutaj również musimy pamiętać o wydzieleniu osobnego wątku.

Zajmiemy się teraz odbieraniem obiektów XML przy użyciu usług sieciowych. Wrzuciłem na serwer przykładowy zasób XML, by mieć co przetwarzać. Ten plik tam pozostanie, więc możesz z niego skorzystać. Adres pliku: http://jsystems.pl/storage/dane.xml

Bazując na poprzednim rozwiązaniu przerobiłem klasę Watek. Kod odpowiedzialny za pobieranie danych przeniosłem do osobnej metody dawajDane. Przy okazji przerobiłem to tak, by adres serwera, port i zasób przekazywać przez parametry metody a nie robić tego „na sztywno”. Dorzuciłem też metodę dawajXml która korzystając z metody dawajDane odbierze dane w postaci String i odda jako obiekt DOM:

Metoda doInBackground korzysta z przed momentem opisanych metod i odbiera obiekt DOM. Metoda onCreate aktywności pozostaje bez zmian: