38
Acesso a Internet

Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Acesso a Internet

Page 2: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Acesso a Rede • Para escrever uma aplicação que suporte

acesso à rede, o manifesto deve ter as permissões e filtros adequados.

• android.permission.INTERNET

• Permite abrir sockets de rede.

• android.permission.ACCESS_NETWORK_STATE

• permite para acessar informações sobre redes.

• ACTION_MANAGE_NETWORK_USAGE

• (introduzido no Android 4.0) indica que seu aplicativo define uma atividade que oferece opções para controlar o uso de dados.

2

Page 3: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

3

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.android.networkusage"

...>

<uses-sdk android:minSdkVersion="4"

android:targetSdkVersion="14" />

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

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

<application

...>

...

<activity android:label="SettingsActivity" android:name=".SettingsActivity">

<intent-filter>

<action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

</activity>

</application>

</manifest>

Page 4: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Acesso à Internet

• Sockets

• Utilizar apenas quando for criado protocolo próprio

• Protocolo HTTP

• Permite usar APIs prontas

• java.net

• Apache Jakarta Commons

• WebServices

• REST

• SOAP 4

Page 5: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Sockets

• Conexão com a Internet de baixo nível.

• Apenas TCP/IP e UDP

• Classes

• Socket

• DataOutputStream

• DataInputStream

5

Page 6: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

HTTP API

• Classes

• HttpClient

• HttpGet, HttpPost

• HttpResponse

• HttpEntity

• Exemplo: HttpClient

6

Page 7: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

HTTP • DefaultHttpClient

• Projeto Apache.

• AndroidHttpClient:

• subtipo do DefaultHttpClient já configurado para valores otimizados no Android.

• não é mais recomendado utilizar estas classes, porque a equipe do Google não dá manutenção a essa implementação.

• HttpUrlConnection,

• que é desenvolvido e suportado pelo Google.

7

Page 8: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Exemplo

8

Page 9: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

JSON x XML

• JSON e XML são formatos para a notação de dados a serem transmitidos;

• A maior e mais importante diferença entre eles nesse momento, é que o XML acaba ocupando muito mais espaço que o JSON quando representam o mesmo objeto.

• XML usa uma tag para identificar o inicio e o final de cada nó.

• O JSON é fortemente recomendado quando estamos falando de dispositivos móveis, por consumir menos banda da conexão de internet do usuário. 9

Page 10: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

10

Page 11: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

JSON (JavaScript Object Notation)

• JSON ganhou muita força como o formato mais utilizado no retorno de webservices, devido a sua simplicidade em comparação com XML.

• Android possui bibliotecas padrão para lidar com JSON:

• JSONObject: lida com um objeto em JSON e

• JSONArray: usada em arrays de objetos JSO

11

Page 12: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Transformando JSON em Objetos Java (Native JSON)

12

{

"cpf": "111222333-00",

"endereco": "Rua das ruas, 9",

"id": "1",

"nome": "Alexandre Dumas"

}

Page 13: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Transformando JSON em Objetos Java (Google GSON)

13

{

"cpf": "111222333-00",

"endereco": "Rua das ruas, 9",

"id": "1",

"nome": "Alexandre Dumas"

}

Page 14: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

JSON (JavaScript Object Notation)

• JSON ganhou muita força como o formato mais utilizado no retorno de webservices, devido a sua simplicidade em comparação com XML.

• Android possui bibliotecas padrão para lidar com JSON.Existem duas classes que são utilizadas com este propósito, JSONObject e JSONArray.

• A primeira serve para lidar com umobjeto em JSON, enquanto a segunda é usada em arrays

• de objetos JSON.

14

Page 15: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

ExemploJSON

{ "id": "0001", "name": "Curso de Android", "about": "www.facom.ufu.br - contato: Prof. Bacalá", "info": "Programação para Dispositivos Móveis usando Android", "location": { "city": "Uberlândia", "country": "Brasil", "street": "Campus Santa Mônica - Lab B4 - Bloco B", "zip": "38400.000" }, "website": "http://www.facom.ufu.br/~bacala/ANDROID", }

15

Page 16: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Exemplo TextView nameText = ( TextView ) findViewById (R.id.name_text ); TextView siteText = ( TextView ) findViewById (R.id.site_text ); TextView addressText = ( TextView ) findViewById (R.id.address_text ); TextView cityText = ( TextView ) findViewById (R.id.city_text ); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll()-.build(); StrictMode.setThreadPolicy ( policy ); String response = makeRequest ("http://www.facom.ufu.br/~bacala/ANDROID/exemploJSON); try { JSONObject json = new JSONObject ( response ); String name = json.getString ("name"); String site= json.getString (“website"); String address = json.getJSONObject ("location").getString ("street"); String city = json.getJSONObject ("location").getString ("city"); nameText.setText ( name ); siteText.setText ( getString (R.string.website_label , site)); addressText.setText ( getString (R.string.address_label , address )); cityText.setText ( getString (R.string.city_label , city )); } catch ( JSONException e) { e.printStackTrace (); }

16

Page 17: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

makeRequest

private String makeRequest ( String urlAddress ) { HttpURLConnection con = null ; URL url = null ; String response = null ; try { url = new URL ( urlAddress ); con = ( HttpURLConnection ) url.openConnection (); response = readStream ( con.getInputStream ()); } catch ( Exception e) { e.printStackTrace (); } finally { con.disconnect (); } return response ; }

17

Page 18: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

readStream private String readStream ( InputStream in) { BufferedReader reader = null ; StringBuilder builder = new StringBuilder (); try { reader = new BufferedReader (new InputStreamReader (in)); String line = null ; while (( line = reader.readLine ()) != null ) { builder.append ( line + "\n"); } } catch ( IOException e) { e.printStackTrace (); } finally { if ( reader != null ) { try { reader.close (); } catch ( IOException e) { e.printStackTrace (); } } } return builder.toString (); }

18

Page 19: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Executando operações de rede em um segmento separado

• Operações de rede podem implicar em atrasos imprevisíveis. Para evitar que isso cause uma má impressão do usuário, sempre execute operações de rede em um segmento separado da UI.

• O AsyncTask fornece uma das formas mais simples para disparar uma nova tarefa a partir do segmento.

19

Page 20: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

AsyncTask

• Encapsula em uma interface simples o uso de threads.

• Deve implementar obrigatoriamente o método doInBackground(), que é exatamente a tarefa que está sendo executada em background.

• Caso necessário alguma atualização na interface, é só sobrescrever o método onPostExecute(). Tudo que estiver dentro deste método é executado na UI thread.

• O método onPreExecute() é executado antes do doInBackground() e também é executado na UI thread.

20

Page 21: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Usando AsyncTask

• No trecho a seguir, o myClickHandler() chama DownloadWebpageTask().execute (stringUrl)

• DownloadWebpageTask é uma subclasse de AsyncTask e implementa as seguintes:

• doInBackground(): chama downloadURL() que obtém e processa o conteúdo da página web, retornando uma String.

• OnPostExecute (): pega a String retornada e exibe na UI.

21

Page 22: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

22

public class HttpExampleActivity extends Activity {

private static final String DEBUG_TAG = "HttpExample";

private EditText urlText;

private TextView textView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

urlText = (EditText) findViewById(R.id.myUrl);

textView = (TextView) findViewById(R.id.myText);

}

// When user clicks button, calls AsyncTask.

// Before attempting to fetch the URL, makes sure that there is a network

connection.

public void myClickHandler(View view) {

// Gets the URL from the UI's text field.

String stringUrl = urlText.getText().toString();

ConnectivityManager connMgr = (ConnectivityManager)

getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

if (networkInfo != null && networkInfo.isConnected()) {

new DownloadWebpageTask().execute(stringUrl);

} else {

textView.setText("No network connection available.");

}

}

Page 23: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

23

// Uses AsyncTask to create a task away from the main UI thread. This task takes a

// URL string and uses it to create an HttpUrlConnection. Once the connection

// has been established, the AsyncTask downloads the contents of the webpage as

// an InputStream. Finally, the InputStream is converted into a string, which is

// displayed in the UI by the AsyncTask's onPostExecute method.

private class DownloadWebpageTask extends AsyncTask<String,Void,String> {

@Override

protected String doInBackground(String... urls) {

// params comes from the execute() call: params[0] is the url.

try {

return downloadUrl(urls[0]);

} catch (IOException e) {

return "Unable to retrieve web page. URL may be invalid.";

}

}

// onPostExecute displays the results of the AsyncTask.

@Override

protected void onPostExecute(String result) {

textView.setText(result);

}

}

...

Page 24: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

24

// Given a URL, establishes an HttpUrlConnection and retrieves

// the web page content as a InputStream, which it returns as

// a string.

private String downloadUrl(String myurl) throws IOException {

InputStream is = null;

// Only display the first 500 characters of the retrieved

// web page content.

int len = 500;

try {

URL url = new URL(myurl);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setReadTimeout(10000 /* milliseconds */);

conn.setConnectTimeout(15000 /* milliseconds */);

conn.setRequestMethod("GET");

conn.setDoInput(true);

// Starts the query

conn.connect();

int response = conn.getResponseCode();

Log.d(DEBUG_TAG, "The response is: " + response);

is = conn.getInputStream();

// Convert the InputStream into a string

String contentAsString = readIt(is, len);

return contentAsString;

// Makes sure that the InputStream is closed after the app is

// finished using it.

} finally {

if (is != null) {

is.close();

}

}

}

Page 25: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Verificando a conexão de rede

• Antes de seu aplicativo tenta se conectar à rede, ele deve verificar para ver se uma conexão de rede está disponível.

• O dispositivo pode estar fora de alcance de uma rede, ou o usuário pode ter desativado tanto Wi-Fi e acesso a dados móvel.

• Use getActiveNetworkInfo() e isConnected()

25

Page 26: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Verificando a conexão de rede

26

public boolean isOnline() {

ConnectivityManager connMgr = (ConnectivityManager)

getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

return (networkInfo != null && networkInfo.isConnected());

}

Page 27: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

• Lendo e convertendo em Texto

• Lendo uma imagem

27

// Reads an InputStream and converts it to a String.

public String readIt(InputStream stream, int len)

throws IOException, UnsupportedEncodingException {

Reader reader = null;

reader = new InputStreamReader(stream, "UTF-8");

char[] buffer = new char[len];

reader.read(buffer);

return new String(buffer);

}

InputStream is = null;

...

Bitmap bitmap = BitmapFactory.decodeStream(is);

ImageView imageView = (ImageView) findViewById(R.id.image_view);

imageView.setImageBitmap(bitmap);

Não se esqueça:

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

Page 28: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Para maiores informaçoes

http://developer.android.com/training/basics/

network-ops/managing.html

28

Page 29: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

WebServices

• Solução usada na integração de sistemas e na comunicação entre aplicações diferentes.

• Torna possível que novas aplicações possam interagir com as já existentes e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis.

• Componentes que permitem às aplicações enviar e receber dados em formato XML.

• Cada aplicação pode ter a sua própria "linguagem", que é traduzida para uma linguagem universal, o formato XML.

29

Page 30: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

WebServices

• REST

• Requisição via URL (GET ou POST)

• Resposta em JSON, XML, etc.

• SOAP- Simple Object Access Protocol

• Requisição e resposta em XML

• invocação remota de um método que necessita especificar o endereço do componente, o nome do método e os argumentos para esse método. • Estes dados são formatados em XML com determinadas

regras e enviados normalmente por HTTP para esse componente. 30

Page 31: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

SOAP (Simple Object Access Protocol)

• Invocação remota de um método necessitando

• endereço do componente,

• o nome do método e

• os argumentos para esse método.

• Dados formatados em XML e enviados por HTTP.

• Não define ou impõe qualquer semântica o que o serviço ou o cliente sejam aplicações desenvolvidas por diferentes linguagens.

31

Page 32: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

SOAP (Simple Object Access Protocol)

• WSDL descreve os serviços disponibilizados à rede através de XML, que providencia a documentação necessária para se chamar um sistema distribuído e o procedimento para que esta comunicação se estabeleça.

• SOAP especifica a comunicação entre um cliente e um servidor, o WSDL descreve os serviços oferecidos..

32

Page 33: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

REST (Transferência de Estado Representativo)

• Técnica de engenharia de software para sistemas distribuídos desenvolvida pelo Roy Fielding.

• Pretendida como uma imagem do design da aplicação se comportará:

• uma rede de websites (um estado virtual),

• onde o usuário progride com uma aplicação selecionando as ligações (transição de estado),

• resultando na página seguinte (que representa o estado seguinte da aplicação) que está sendo transferida ao usuário e apresentada para seu uso.

• Sistemas que seguem os princípios REST são conhecidos como RESTful.

• Foco na URL e nos recursos. 33

Page 34: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

REST

• O principal em um Web Service RESTful são as URLs e os recursos.

• Recurso ou entidade, ou seja, um objeto com informação que será representado por meio de um XML.

• a URL para acessar esse recurso será sempre a mesma, porém caso mudemos o método HTTP (GET, POST, PUT e DELETE) o resultado da requisição será diferente.

34

Page 35: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Implementando um simples REST Client no Android

35

Page 36: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Implementando um simples REST Client no Android

36

Page 37: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Implementando um simples REST Client no Android

37

Page 38: Acesso a Internet - FACOMbacala/ANDROID/10 - AcessoWeb.pdf · distribuídos desenvolvida pelo Roy Fielding. • Pretendida como uma imagem do design da aplicação se comportará:

Mais Informações

Utilizando Web Services no Google Android

• http://www.cesar.org.br/site/files/file/

WM23_Android_WebServices.pdf

Como consumir um Web Service pelo Android

• http://www.portalandroid.org/comunidade/viewtopic.php?f=7&t=17465

38