android app development 06 : network & web services

59
Network & Web Services Anuchit Chalothorn [email protected] 6 Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Upload: anuchit-chalothorn

Post on 17-May-2015

1.989 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Android App Development 06 : Network & Web Services

Network & Web ServicesAnuchit [email protected]

6

Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Page 2: Android App Development 06 : Network & Web Services

Connecting to Network

Note that to perform the network operations described in this lesson, your application manifest must include the following permissions:

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

Ref: http://developer.android.com/training/basics/network-ops/connecting.html

Page 3: Android App Development 06 : Network & Web Services

StrictMode

Within an Android application you should avoid performing long running operations on the user interface thread. This includes file and network access. StrictMode allows to setup policies in your application to avoid doing incorrect things.

Page 4: Android App Development 06 : Network & Web Services

Turn StrictMode Off

If you are targeting Android 3.0 or higher, you can turn this check off via the following code at the beginning of your onCreate() method of your Activity. (Not recommend)

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

Page 5: Android App Development 06 : Network & Web Services

Manage Network Usage

A device can have various types of network connections. This lesson focuses on using either a Wi-Fi or a mobile network connection. To check the network connection, you typically use the following classes:

● ConnectivityManager: Answers queries about the state of network connectivity. It also notifies applications when network connectivity changes.

● NetworkInfo: Describes the status of a network interface of a given type (currently either Mobile or Wi-Fi).

Page 6: Android App Development 06 : Network & Web Services

Check the Network Connection

ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo=connMgr.getActiveNetworkInfo();

if (networkInfo != null && networkInfo.isConnected()){ // fetch data} else { // display error}

Page 7: Android App Development 06 : Network & Web Services

Workshop: Check network connection

Use snippet from previous slide to check network connection and notify user.

ConnectivityManager connMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

Page 9: Android App Development 06 : Network & Web Services

Network Operations on a Separate Thread

Network operations can involve unpredictable delays. To prevent this from causing a poor user experience, always perform network operations on a separate thread from the UI. The AsyncTask class provides one of the simplest ways to fire off a new task from the UI thread.

Page 10: Android App Development 06 : Network & Web Services

AsyncTask

The AsyncTask class provides one of the simplest ways to fire off a new task from the UI thread.

private class DownloadWebpageText extends AsyncTask { protected String doInBackground(String... urls) {

... }}

Page 11: Android App Development 06 : Network & Web Services

Workshop: Read text data from web

Read HTML data from web using HTTPConnection. See snippet in GitHub.

Page 13: Android App Development 06 : Network & Web Services
Page 14: Android App Development 06 : Network & Web Services

Workshop: Load Image from Web

Read stream binary from web and pass into ImageView

InputStream in = new URL(url).openStream();myImage = BitmapFactory.decodeStream(in);imageView.setImageBitmap(myImage);

Page 16: Android App Development 06 : Network & Web Services

Web Services

A web service is a method of communication between two electronic devices over the World Wide Web. We can identify two major classes of Web services

● REST-compliant Web services ● arbitrary Web services.

Page 17: Android App Development 06 : Network & Web Services

SOAP: Old fasion

Requester Provider

Yellow Pages

Requester ask or search yellow pages which address and how to talk with provider. The yellow pages 'll send the response by using WSDL how to talk which provide by Provider to the requester.

Requester receives the address and methods then communicate with Provider.

WSDL

WSDL

WSDL

SOAP

Page 18: Android App Development 06 : Network & Web Services

Web APIs

A web API is a development in web services where emphasis has been moving to simpler representational state transfer (REST) based communications. RESTful APIs do not require XML-based web service protocols (SOAP and WSDL) to support their light-weight interfaces.

Page 19: Android App Development 06 : Network & Web Services

API Protocols

Ref: http://java.dzone.com/articles/streaming-apis-json-vs-xml-and

Page 20: Android App Development 06 : Network & Web Services

Data Formats

Ref: http://java.dzone.com/articles/streaming-apis-json-vs-xml-and

Page 21: Android App Development 06 : Network & Web Services

Say "Goodbye" to XML

Page 22: Android App Development 06 : Network & Web Services

RESTFul / REST API

a style of software architecture for distributed systems such as the WWW. The REST language uses nouns and verbs, and has an emphasis on readability. Unlike SOAP, REST does not require XML parsing and does not require a message header to and from a service provider.

Page 23: Android App Development 06 : Network & Web Services

Concept

● the base URI for the web service, such as http://example.com/resources/

● the Internet media type of the data supported by the web service.

● the set of operations supported by the web service using HTTP methods (e.g., GET, PUT, POST, or DELETE).

● The API must be hypertext driven.

Page 24: Android App Development 06 : Network & Web Services

HTTP Request

Client Server

HTTP Request

HTTP Response + Data

200 OK403 Forbidden404 Not found500 Internal Error

Page 25: Android App Development 06 : Network & Web Services

HTTP Request

Requester Provider

GET /users/anoochit HTTP/1.1

200 OK + Data

Page 26: Android App Development 06 : Network & Web Services

Example URI

● http://example.org/user/● http://example.org/user/anuchit● http://search.twitter.com/search.json?q=xxx

Page 27: Android App Development 06 : Network & Web Services

Request & Action

Resource GET PUT POST DELETE

http://example.org/user list collection replace create delete

http://example.org/user/rose list data replace/ create ? / create delete

Page 28: Android App Development 06 : Network & Web Services

Mobile App with Web Services

Provider

Data Req

(2)Data

(1)Parse Res Data

http request

response

* This is your destiny you cannot change your future, accept using vendor sdk's

Page 29: Android App Development 06 : Network & Web Services

Call Web Services

Android RESTServer

200 OK with XML or JSON string

GET /user/anoochit

● Check request method● Parse data from URI● Process● Return XML or JSON string

● HTTP request● Method GET, POST, PUT or DELETE● Get BufferReader and pack into

"String" <= JSON String● Parse "String Key"● Get your value

Page 30: Android App Development 06 : Network & Web Services

No "official" standard

There is no "official" standard for RESTful web services, This is because REST is an architectural style, unlike SOAP, which is a protocol. Even though REST is not a standard, a RESTful implementation such as the Web can use standards like HTTP, URI, XML, etc.

Page 33: Android App Development 06 : Network & Web Services

JSON Example

{ "firstname": "Anuchit", "lastname": "Chalothorn"}

Page 34: Android App Development 06 : Network & Web Services

JSON Example[ { "firstname" : "Anuchit", "lastname" : "Chalothorn" }, { "firstname" : "Sira", "lastname" : "Nokyongthong" }]

Page 35: Android App Development 06 : Network & Web Services

Android & JSON

JSON is a very condense data exchange format. Android includes the json.org libraries which allow to work easily with JSON files.

Page 36: Android App Development 06 : Network & Web Services

JSON Object Parsing

JSONObject c = new JSONObject(json);String firstname=c.get("firstname").toString();String lastname=c.get("lastname").toString();

Page 38: Android App Development 06 : Network & Web Services

JSON Array Parsing

JSONArray data = new JSONArray(json);for (int i = 0; i < data.length(); i++) {JSONObject c = data.getJSONObject(i);String firstname = c.getString("firstname");String lastname = c.getString("lastname");}

Page 40: Android App Development 06 : Network & Web Services

Simple RESTful with PHP

You can make a simple RESTful API with PHP for routing, process and response JSON data. The following tools you should have;● Web Server with PHP support● PHP Editor ● REST Client plugin for browser

Page 41: Android App Development 06 : Network & Web Services

Workshop: JSON with PHP

PHP has a function json_encode to generate JSON data from mix value. Create an App to read JSON data in a web server.

header('Content-Type: application/json;charset=utf-8');$data = array("msg"=>"Hello World JSON");echo json_encode($data);

Page 43: Android App Development 06 : Network & Web Services

Workshop: JSON with PHP

Create multi-dimensional array the pass to json function to make a JSON Array data

$data=array( array("firstname"=>"Anuchit", "lastname"=>"Chalothorn"), array("firstname"=>"Sira", "lastname"=>"Nokyongthong"));

Page 45: Android App Development 06 : Network & Web Services

Workshop: Check request methods

PHP has $_SERVER variable to check HTTP request methods of each request from client, so you can check request from this variable.

$method = $_SERVER["REQUEST_METHOD"];switch($method){ case "GET": break; ...}

Page 47: Android App Development 06 : Network & Web Services

RESTful Design

Now we can check request from client, now we can follow the RESTful design guideline. You may use htaccess to make a beautiful URL.

http://hostname/v1/contact/data

service version number resource data

Page 48: Android App Development 06 : Network & Web Services

Call RESTful API

Android RESTServer

200 OK with XML or JSON string

GET /user/anoochit

● Check request method● Parse data from URI● Process● Return XML or JSON string

● HTTP request● Method GET, POST, PUT or DELETE● Get BufferReader and pack into

"String" <= JSON String● Parse "String Key"● Get your value

Page 49: Android App Development 06 : Network & Web Services

Workshop: Simple RESTful

Make RESTful service of this● Echo your name

○ sent your name with POST method and response with JSON result

● Asking for date and time○ sent GET method response with JSON result

● Temperature unit converter○ sent a degree number and type of unit with

POST method and response JSON result

Page 50: Android App Development 06 : Network & Web Services

Workshop: RESTful Echo

$data = array("result"=> "Hello, ".$_POST["name"]);echo json_encode($data);

Page 52: Android App Development 06 : Network & Web Services

Workshop: RESTful Temperatureif ($_POST["type"]=="c") { $result=(($_POST["degree"]-32)*5)/9;} else { $result=(($_POST["degree"]*9)/5)+32;}$data = array("result"=>$result));echo json_encode($data);

Page 53: Android App Development 06 : Network & Web Services

Workshop: App REST Echo

Make a mobile app call REST Echo API using Http Post method to send value.

Page 55: Android App Development 06 : Network & Web Services

Workshop: App REST Temperature

Make a mobile app call REST temperature unit converter API, using Http Post method to send a degree value and unit type to convert.

Page 57: Android App Development 06 : Network & Web Services

Workshop: App REST Date Time

Make a mobile app call REST date time, using Http Get method to get a value of date and time.

Page 59: Android App Development 06 : Network & Web Services

End