RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie



Podobne dokumenty
akademia androida Http i AsyncTask część VII

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Android pierwsza aplikacja

JAVA I SIECI. MATERIAŁY:

[Android] Podstawy programowania

Tworzenie i wykorzystanie usług

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Systemy operacyjne na platformach mobilnych

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Aplikacja wielowątkowa prosty komunikator

Systemy operacyjne na platformach mobilnych

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Mechanizm powiadomień

Java. Programowanie Obiektowe Mateusz Cicheński

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Zwinne i lekkie aplikacje webowe z. Jacek Laskowski

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie w języku Java

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Podstawowe elementy GUI - zadania

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Java programowanie w sieci. java.net RMI

JAX-RS czyli REST w Javie. Adam Kędziora

Systemy operacyjne na platformach mobilnych

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Mechanizm zapisu preferencji

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Programowanie współbieżne Laboratorium nr 11

Fragmenty są wspierane od Androida 1.6

Wykorzystanie plików

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Programowanie rozproszone w języku Java

akademia androida Składowanie danych część VI

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie w języku Java. Bazy danych SQLite w Javie

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Programowanie obiektowe

Laboratorium Systemów Mobilnych. Wykład 1

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

SOAP. Autor: Piotr Sobczak

Java Platform Micro Edition

Aplikacja wielow tkowa prosty komunikator

Komunikacja z użyciem gniazd aplikacje klient-serwer

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Programowanie obiektowe

Zaawansowane aplikacje internetowe laboratorium

Wywoływanie metod zdalnych

Systemy operacyjne na platformach mobilnych

1 Atrybuty i metody klasowe

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie telefonów z Windows Phone 7, cz. 4

Podstawy i języki programowania

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Platformy Programistyczne Zagadnienia sieciowe i wątki

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

1. Co można powiedzieć o poniższym kodzie?

JAVA I BAZY DANYCH. MATERIAŁY:

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Aplikacje RMI Lab4

Podejście obiektowe do budowy systemów rozproszonych

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie i projektowanie obiektowe

Bezpieczne uruchamianie apletów wg

Podstawowe elementy GUI - zadania

Serwer współbieżny połączeniowy

Wywoływanie metod zdalnych

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Obsługa SMS i telefonii

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Remote Method Invocation 17 listopada 2010

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Stanowe komponenty sesyjne

Podstawy współbieżności

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

JSF 1.2. w wykonaniu NetBeans IDE 6.1. Jacek Laskowski

Systemy operacyjne na platformach mobilnych

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

JavaFX. Programowanie Obiektowe Mateusz Cicheński

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Transkrypt:

RESTful Android Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie Jacek Laskowski jacek@japila.pl http://www.jaceklaskowski.pl wersja 1.0, 08.12.2011

O prelegencie - Jacek Laskowski Entuzjasta Java EE, OSGi, SCA oraz programowania funkcyjnego (Clojure) Założyciel i lider Warszawa JUG Organizator konferencji Javarsovia, Confitura, warsjawa Członek zespołu NetBeans DreamTeam Blogger na Blogger na http://blog.japila.pl Twittuje jako @jaceklaskowski Członek zespołów Apache Geronimo i Apache OpenEJB Specjalista produktów IBM WebSphere w IBM Polska

konferencja społeczności javowej w Polsce Confitura 2012 http://confitura.pl 6-7 lipiec Warszawa

Problem? package pl.japila.android; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; public class ANRDemoActivity extends Activity implements OnClickListener { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); View button = findviewbyid(r.id.button1); button.setonclicklistener(this); public void onclick(view v) { try { Thread.sleep(30*1000); catch (InterruptedException e) { e.printstacktrace();

30 sekund bezruchu package pl.japila.android; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; public class ANRDemoActivity extends Activity implements OnClickListener { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); View button = findviewbyid(r.id.button1); button.setonclicklistener(this); public void onclick(view v) { try {! Thread.sleep(30*1000); catch (InterruptedException e) { e.printstacktrace();

Application Not Responding (ANR) Wątek główny obsługujący UI - main" lub thread UI Android chroni przed niewłaściwie (nie)aktywnymi aplikacjami Brak odpowiedzi po 5 sek. Długotrwałe operacje I/O (sieciowe)

Z Androida po HTTP java.net.httpurlconnection Apache HTTP Client - org.apache.http.client android.net.http.androidhttpclient For Gingerbread and better, HttpURLConnection is the best choice. New applications should use HttpURLConnection; it is where we will be spending our energy going forward. http://android-developers.blogspot.com/2011/09/androids-http-clients.html

HttpURLConnection w użyciu public void onclick(view v) { HttpURLConnection urlconnection = null; try { URL url = new URL(REST_SERVICE); urlconnection = (HttpURLConnection) url.openconnection(); InputStreamReader isr = new InputStreamReader(urlConnection.getInputStream()); BufferedReader br = new BufferedReader(isr); try { String line; while ((line = br.readline())!= null) { Log.i("ANRDemo", line); catch (IOException e) { e.printstacktrace(); catch (Exception e) { e.printstacktrace(); finally { if (urlconnection!= null) { urlconnection.disconnect();

HttpURLConnection w użyciu...złym public void onclick(view v) { HttpURLConnection urlconnection = null; try { URL url = new URL(REST_SERVICE); urlconnection = (HttpURLConnection) url.openconnection(); InputStreamReader isr = new InputStreamReader(urlConnection.getInputStream()); BufferedReader br = new BufferedReader(isr); try { String line; while ((line = br.readline())!= null) { Log.i("ANRDemo", line); catch (IOException e) { e.printstacktrace(); catch (Exception e) { e.printstacktrace(); finally { if (urlconnection!= null) { urlconnection.disconnect(); Application Not Responding

Wątki w Androidzie Długotrwałe operacje wykonywane w osobnym wątku java.lang.thread/runnable Specjalizowane klasy android.os.handler public void onclick(view v) { try { Thread.sleep(30*1000); catch (InterruptedException e) { e.printstacktrace(); android.app.intentservice android.os.asynctask

Poprawnie z Thread/Runnable public void onclick(view v) { new Thread(new Runnable() { Log.d(TAG, Thread.currentThread().getName()); HttpURLConnection urlconnection = null; try { URL url = new URL(REST_SERVICE); urlconnection = (HttpURLConnection) url.openconnection(); InputStreamReader isr = new InputStreamReader(urlConnection.getInputStream()); BufferedReader br = new BufferedReader(isr); try { String line; while ((line = br.readline())!= null) { Log.d(TAG, line); catch (IOException e) { e.printstacktrace(); catch (Exception e) { e.printstacktrace(); finally { if (urlconnection!= null) { urlconnection.disconnect(); ).start();

Aktualizacja aktywnego ekranu Specjalizowane metody do aktualizacji danych w UI Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) public void onclick(view v) { new Thread(new Runnable() { final Bitmap bitmap = loadimagefromnetwork("http://example.com/image.png"); mimageview.post(new Runnable() { mimageview.setimagebitmap(bitmap); ); ).start();

Czym jest REST? REpresentational State Transfer Styl architektoniczny Read = GET /prezentacja/1430 Powrót do zasad HTTP - protokół transportowy przesyłanie stanu między klientem a aplikacją reprezentacja zasobu - XML, JSON Create = POST /prezentacja + dane (stan) Update = PUT /prezentacja/1430 + dane (stan) Delete = DELETE /prezentacja/1430

RESTClient - GET public void onclick(final View v) { new Thread(new Runnable() { //... URL url = new URL(REST_SERVICE); conn = (HttpURLConnection) url.openconnection(); //... v.post(new Runnable() { ); ).start(); TextView textview = (TextView) findviewbyid(r.id.edittext1); textview.settext(response);

RESTClient - POST public void onclick(final View v) { new Thread(new Runnable() { //... URL url = new URL(REST_SERVICE); conn = (HttpURLConnection) url.openconnection(); conn.setdoinput(true); conn.setdooutput(true); conn.setusecaches(false); conn.setrequestmethod("post"); //... v.post(new Runnable() { ); ).start(); TextView textview = (TextView) findviewbyid(r.id.edittext1); textview.settext(response);

RESTClient - PUT public void onclick(final View v) { new Thread(new Runnable() { //... URL url = new URL(REST_SERVICE); conn = (HttpURLConnection) url.openconnection(); conn.setdoinput(true); conn.setdooutput(true); conn.setusecaches(false); conn.setrequestmethod("put"); //... v.post(new Runnable() { ); ).start(); TextView textview = (TextView) findviewbyid(r.id.edittext1); textview.settext(response);

RESTClient - DELETE public void onclick(final View v) { new Thread(new Runnable() { //... URL url = new URL(REST_SERVICE); conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("delete"); //... v.post(new Runnable() { ); ).start(); TextView textview = (TextView) findviewbyid(r.id.edittext1); textview.settext(response);

Zmiany stanów Activity a wątki Zmiana orientacji ekranu Rozmowa przychodząca Brak pamięci Inne sytuacje wyjątkowe

Pytania? Jacek Laskowski jacek@japila.pl http://www.jaceklaskowski.pl wersja 1.0, 08.12.2011