poniedziałek, 17 lutego 2014

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


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.


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 </application> a przed </manifest>. 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:


12 komentarzy:

  1. Znalazłem błąd w tekście "Ponieważ stosowanie z usług sieciowych", pierwszy akapit ;)

    OdpowiedzUsuń
  2. W jaki sposób wyświetlić to co zostało pobrane ?

    OdpowiedzUsuń
    Odpowiedzi
    1. wyświetlasz zmienną (w tym przypadku "d" np. poprzez TextView

      Usuń
  3. W jaki sposób zrobić progressBar, który będzie się zwiększał (w metodzie onProgressUpdate) podczas przesyłu danych? (chodzi mi o progressBar poziomy)
    Nie wiem jak dostać wielkość danych co mają być przesłane i jak tą informację wykorzystać przy zwiększaniu progressBara.

    OdpowiedzUsuń
  4. W jaki sposób wysyłać dane z telefonu na serwer? Chodzi mi o coś takiego, jak w przypadku formularzy na stronach internetowych: użytkownik np. wpisuje jakiś tekst, łączy się z odpowiednią stroną przesyłając te dane metodą Get lub Post, a potem działający na serwerze skrypt PHP coś z nimi dalej robi.

    OdpowiedzUsuń
  5. Do not suffer after the day with our company, the Knights of Dammam, where our company provides the best home services at all and we have a section of cleaning and control and sewerage and insulation, as well as we have a special section of anti-termites and we have a special cleaning of reservoirs, and our shop cleaning boards and the best cleaning and cleaning materials Modern machines.
    Home cleaning company in Dammam


    Transport company in Dammam


    House cleaning company Babha

    Taslik sewer company in Dammam

    Roof Insulation Company in Dammam

    An insect control company in Dammam


    Company for the control of white ants in Dammam


    Company cleaning boards and Knab Dammam


    OdpowiedzUsuń
  6. Shams El Ghadeer Co. For Household Services Our company provides the best cleaning services in Riyadh since our company provides house cleaning services, removal services, leakage detection, surface insulation, pest control, cleaning service, tanks & paints service

    Surface Insulation Company in North Riyadh


    Furniture transfer company in Riyadh


    The company revealed leaks in the north of Riyadh


    Company cleaning tanks in Riyadh


    An insect control company in Riyadh


    Paints Company in Riyadh


    Company cleaning houses in Riyadh


    OdpowiedzUsuń
  7. عزيز العميل هناك العديد من المشاكل التى تواجه كل بيت سعودى وبالاخص فى مدينة ابها ومن اخطر هذه المشاكل كثرة الحشرات والقوراض بالمنزل مما يجعلها تشكل خطر كبير على الاسرة والصحة العمامة لما تنقله الحشرات من امراض وايضا تقوم بتخريب المنزل وقد تؤدى الى انهيارة مثل النمل الابيض لذالك توفر شركتن افضل فريق متخصص فى ابادة الحشرات والقوارض بافضل المبيدات الامنة تمام على الاطفال وبالضمان ، ايضا من اكثر المشالك انتشار وتشكل خطر بعد الحشرات هى عدم تنظيف المنزل بشكل دورى وبالاخص المفروشات مثل المجالس والكنب والموكيت والسجاد لما تتعرض له من اتربة متاركمة عليها وهنا ياتى دور شركتنا كافضل شركة تنظيف منازل وفلل وقصور ومجالس وموكيت بالبخار وبافضل السوائل المنظفة والمعطرة والتى تعطى منظر ورائحة منعشة للمنزل نحن الافضل بدون منافس كما ان اسعارنا تتناسب مع الجميع لطلب احدى خدمات شركتنا يرجى التوجه الى الموقع الرسمى من خلال الروابط الموضحة بالاسفل شركة مكافحة حشرات بابها
    شركة رش مبيدات بابها
    شركة تنظيف بابها
    شركة تنظيف فلل بابها
    شركة تنظيف مجالس بابها
    شركة مكافحة حشرات بخميس مشيط
    شركة رش مبيدات بخميس مشيط
    شركة تنظيف بخميس مشيط
    شركة تنظيف فلل بخميس مشيط
    شركة تنظيف مجالس بخميس مشيط


    OdpowiedzUsuń
  8. شركة قمة الجنوب تقدم افضل الخدمات المنزلية بالمنطقة الجنوبية حيث انها تقدم افضل الخدمات المنزلية وهي
    ( تنظيف منازل - تنظيف خزامنات - كشف تسربات المياه - مكافحة الحشرات)

    شركة تنظيف منازل بابها

    شركة تنظيف خزانات بابها

    شركة كشف تسربات بابها

    شركة مكافحة حشرات بابها

    شركة تنظيف منازل بخميس مشيط

    شركة كشف تسربات بخميس مشيط

    شركة تنظيف خزانات بخميس مشيط

    شركة مكافحة حشرات بخميس مشيط

    OdpowiedzUsuń
  9. شركة النور للخدمات المنزلية تقدم شركتنا افضل الخدمات المنزلية بكل من ابها وخميس مشيط ونجران وجازان وبيشة حيث ان خدمات شركتنا هي تنظيف منازل و تسليك مجاري وعزل اسطح و مكافحة حشرات والي غيرة من باقي الخدمات المنزلية

    شركة تسليك مجاري بابها

    شركة كشف تسربات المياه بابها

    شركة مكافحة حشرات بابها

    شركة عزل اسطح بابها

    شركة نقل اثاث بابها

    شركة تنظيف منازل بابها

    شركة تنظيف منازل بخميس مشيط

    شركة مكافحة حشرات بخميس مشيط

    شركة تنظيف منازل بنجران

    OdpowiedzUsuń
  10. اصبحت سيدات المنازل تعانى الكثير اثناء تنظيف المنزل لعدم وجود الوقت الكافى كما انها تشعر بالتعب الشديد بعد الانتهاء لما توجه من عناء كبير من حمل السجاد والموكيت لتنظيفه وايضا لتحريك المجالس والكنب لتنظيف اسفلها لذالك توفر لكم شركة مكانك افضل شركة تنظيف منازل وفلل ومجالس وموكيت بالمنطقة الشرقية بافضل معدات التنظيف والسوائل المنظفة والمعطرة كما نوفر ايضا خدمات تركيب طار حمام واتخلص من الحمام وما يسببمه من مشاكل كثير فى اتساخ المنزل لذالك نوفر لكم افضل طرق المكافحة التامة للحمام . شركة تنظيف بالدمام
    شركة تنظيف بالخبر
    شركة تنظيف بالجبيل
    شركة تنظيف بالقطيف
    شركة تنظيف بالاحساء
    تركيب طارد حمام بالدمام
    تركيب طارد حمام بالاحساء
    تركيب طارد حمام بالقطيف
    تركيب طارد حمام بالجبيل
    ركيب طارد حمام بالخبر


    OdpowiedzUsuń