Luca Bedogni Dipartimento di Scienze dellInformazione Universit di - - PowerPoint PPT Presentation

luca bedogni
SMART_READER_LITE
LIVE PREVIEW

Luca Bedogni Dipartimento di Scienze dellInformazione Universit di - - PowerPoint PPT Presentation

Programming with Android: Network Operations Luca Bedogni Dipartimento di Scienze dellInformazione Universit di Bologna Outline Network operations : WebView Network operations : WebView and WebSettings Network operations : HTTP Client


slide-1
SLIDE 1

Programming with Android: Network Operations

Luca Bedogni

Dipartimento di Scienze dell’Informazione Università di Bologna

slide-2
SLIDE 2

Luca Bedogni – Network programming with Android

2

Outline

Network operations: OKHttp Network operations: Download Manager Network operations: HTTP Client Network operations: WebView and WebSettings Network operations: WebView Network operations: TCP/UDP Sockets Network operations: Volley

slide-3
SLIDE 3

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

3

Android: Network Operations

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

Ø In order to perform network operations (also the one described earlier), specific permissions must be set on the AndroidManifest.xml. Ø Failure in setting the permissions will cause the system to throw a run-time exception …

slide-4
SLIDE 4

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

4

Android: Network Operations

ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // fetch data } else { // display error }

Ø Before the application attempts to connect to the network, it should check to see whether a network connection is available using getActiveNetworkInfo() and isConnected() …

slide-5
SLIDE 5

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

5

Android: WebView Usage

WebView à A View that displays web pages, including simple browsing methods (history, zoom in/out/ search, etc).

Implemented by the WebView class

public WebView(Context contex)

Main methods: Ø public void loadUrl(String url) à load the HTML page at url Ø public void loadData(String data, String mimeType, string encoding) à load the HTML page contained in data

slide-6
SLIDE 6

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

6

Android: WebView Usage

slide-7
SLIDE 7

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

7

Android: WebView Usage By default, the WebView UI does not include any navigation button …However, callbacks methods are defined:

Øpublic void goBack() Øpublic void goForward() Øpublic void reload() Øpublic void clearHistory()

slide-8
SLIDE 8

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

8

Android: WebView Usage It is possible to modify the visualization options of a WebView through the WebSettings class.

public WebSettings getSettings()

Some options: Ø void setJavaScriptEnabled(boolean) Ø void setBuildInZoomControls(boolean) Ø void setDefaultFontSize(int)

slide-9
SLIDE 9

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

9

Android: Download Manager DownloadManager à System service that handles long-run HTTP downloads.

DownloadManager dm=(DownloadManager) getSystemService getSystemService(DOWNLOAD_SERVICE);

Ø The client can specify the file to be downloaded through an URI (path). Ø Download is conducted in background (with retries) Ø Broadcast Intent action is sent to notify when the download completes.

slide-10
SLIDE 10

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

10

Android: Download Manager

Request request=new DownloadManager.Request(Uri.parse(address));

Ø The Request class is used to specify a download request to the Download Manager.

Ø long enqueue(DownloadManager.Request) Ø Cursor query(DownloadManager.Query) Ø ParcelFileDescriptor openDownloadedFile(long) Main methods of the DownloadManager

slide-11
SLIDE 11

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

11

Android: HTTP Classes HTTP (HyperText Tranfer Protocol): Network protocol for exchange/transfer data (hypertext)

Request/Resonse Communication Model

Ø HEAD Ø GET Ø POST Ø PUT Ø DELETE Ø TRACE Ø CONNECT

MAIN COMMANDS

slide-12
SLIDE 12

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

12

Android: HTTP Classes HTTP (HyperText Tranfer Protocol): Network protocol for exchange/transfer data (hypertext)

Two implementations of HTTP Clients for Android: Ø HTTPClient à Complete extendable HTTP Client suitable for web browser (not supported anymore?) Ø HTTPUrlConnection à Light-weight implementation, suitable for client-server networking applications (recommended by Google) In both cases, HTTP connections must be managed on a separate thread, e.g. using AsynchTask (not the UI thread!).

slide-13
SLIDE 13

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

13

Android: HTTP (Abstract) Classes Ø HttpClient à Interface for an HTTP client Ø HttpRequest à Interface for an HTTP request Ø HttpResponse à Interface for an HTTP response Ø ResponseHandler<T> à Handler that creates an object <T> from an HTTP Response Ø HttpContext à Context of the HTTP Request (request+response+data)

slide-14
SLIDE 14

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

14

Android: HTTP Classes Ø HttpClient à Interface for an HTTP client

(DefaultHttpClient à implementation of an HttpClient)

HttpClient client=new DefaultHttpClient();

Main method: The public method execute(…) performs an HTTP request, and allows to process an HTTP reply from the HTTP server.

abstract<T> T execute execute(HttpUriRequest request, ResponseHandler <T> responseHandler)

One of the signature of execute()

slide-15
SLIDE 15

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

15

Android: HTTP Classes Ø HttpRequest à Interface for an HTTP request Two implementations: HttpGet à implements the GET HTTP method HttpPost à Implements the POST HTTP method

HttpGet request=new HttpGet HttpGet(String address); HttpGet request=new HttpGet HttpGet(URI address);

slide-16
SLIDE 16

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

16

Android: HTTP Classes Ø ResponseHandler <T> à Interface for creating an object <T> from an HttpResponse,

  • btained after having executed an HttpRequest.

public abstract T handleResponse (HttpResponse res)

Method to override

Generally, <T> is a String (HTML code) …

slide-17
SLIDE 17

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

17

Android: HTTP Classes Ø HttpPost à Implements the POST HTTP method

List<NomeValuePair> par=new ArrayList<NomeValuePair>() par.add(new BasicNameValuePair(“name”,”Marco”); HttpEntity postEntity=new UrlEncodedFormEntity UrlEncodedFormEntity(par); request.setEntity setEntity(postEntity);

Encapsulating a parameter …

HttpPost request=new HttpPost HttpPost(String address); HttpPost request=new HttpPost HttpPost(URI address);

slide-18
SLIDE 18

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

18

Android: HTTP Classes

Basic HTTPClient Request-Response Application … HttpClient client=new DefaultHttpClient(); new DefaultHttpClient(); HttpGet request=new HttpGet(); new HttpGet(); request.setURI(“http//www.cs.unibo.it”); try { try { client.execute(request, responseHandler); client.execute(request, responseHandler); } catch (ClientProtocolException e) { catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { catch (IOException e) { e.printStackTrace(); }

slide-19
SLIDE 19

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

19

Android: HTTP Classes

Basic HTTPClient Request-Response Application …

class MyResponseHandler implements ResponseHandler<String> { @Override public String handleResponse(HttpResponse response) { InputStream content=response.getEntity().getContent(); byte[] buffer=new byte[1024]; int numRead=0; ByteArrayOutputStream stream=new ByteArrayOutputStream(); while ((numRead=content.read(buffer))!=-1) stream.write(buffer, 0, numRead); content.close(); String result=new String(stream.toByteArray()); return result; } }

slide-20
SLIDE 20

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

20

Android: HTTP Classes

HTTPUrlConnection à HTTP component to send and receive streaming data over the web.

  • 1. Obtain a new HttpURLConnection by calling the URL.openConnection()

URL url = new URL("http://www.android.com/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

  • 2. Prepare the request, set the options (e.g. session cookies)
  • 3. For POST commands, invoke setDoOutput(true). Transmit data by

writing to the stream returned by getOutputStream().

slide-21
SLIDE 21

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

21

Android: HTTP Classes

HTTPUrlConnection à HTTP component to send and receive streaming data over the web.

  • 4. Read the response (data+header). The response body may be read from

the stream returned by getInputStream(). InputStream in = new BufferedInputStream(urlConnection.getInputStream());

  • 5. Close the session when ending reading the stream through disconnect().

urlConnection.disconnect();

slide-22
SLIDE 22

Luca Bedogni – Network programming with Android

OKHttp vHTTP Client for Java applications vSupports multiplexing of different connections on a same socket vLower latency vCan compress larger downloads transparently vRepeated requests may be served through cache

22

slide-23
SLIDE 23

Luca Bedogni – Network programming with Android

OKHttp builder vRequests are built through the builder paradigm

23

OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://academic.lucabedogni.it") .build(); Request request = new Request.Builder() .header("Authorization", ”your authorization here") .url("http://academic.lucabedogni.it") .build();

slide-24
SLIDE 24

Luca Bedogni – Network programming with Android

OKHttp: network calls vSynchronous call vAsynchronous call

24

Response response = client.newCall(request).execute(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {} @Override public void onResponse(Call call, final Response response) { if (response.isSuccessful()) { // Here we have the response }

slide-25
SLIDE 25

Luca Bedogni – Network programming with Android

Volley vVolley is an HTTP library vSupports scheduling of network requests vCan have concurrent connections and handles priorities vCaching mechanism

25

slide-26
SLIDE 26

Luca Bedogni – Network programming with Android

Volley: sending a request

26

slide-27
SLIDE 27

Luca Bedogni – Network programming with Android

Volley: sending a request

27

RequestQueue queue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest(Request.Method.GET, baseUrl, new Response.Listener<String>() { @Override public void onResponse(String response) { // do something } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // do something } }); queue.add(stringRequest);

slide-28
SLIDE 28

Luca Bedogni – Network programming with Android

(c) Luca Bedogni 2012

28

Android: TCP/IP Communication TCP/UDP Communication à Android applications can use java.net.Socket facilities. ØUse socket-based programming like in Java …

Class DatagramSocket à UDP Socket Classes Socket/ServerSocket à TCP socket Read/Write on Sockets through InputStream/OutputStream