Você está na página 1de 38

Acesso a Internet

Acesso a Rede
Para escrever uma aplicao que suporte
acesso rede, o manifesto deve ter as
permisses e filtros adequados.
android.permission.INTERNET
Permite abrir sockets de rede.

android.permission.ACCESS_NETWORK_STATE
permite para acessar informaes sobre redes.

ACTION_MANAGE_NETWORK_USAGE
(introduzido no Android 4.0) indica que seu
aplicativo define uma atividade que oferece
opes para controlar o uso de dados.
2

<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>

Acesso Internet
Sockets
Utilizar apenas quando for criado protocolo
prprio

Protocolo HTTP
Permite usar APIs prontas
java.net
Apache Jakarta Commons

WebServices
REST
SOAP

Sockets
Conexo com a Internet de baixo nvel.

Apenas TCP/IP e UDP


Classes
Socket

DataOutputStream
DataInputStream

HTTP API
Classes
HttpClient
HttpGet, HttpPost
HttpResponse

HttpEntity

Exemplo: HttpClient

HTTP
DefaultHttpClient
Projeto Apache.

AndroidHttpClient:
subtipo do DefaultHttpClient j configurado
para valores otimizados no Android.
no mais recomendado utilizar estas
classes, porque a equipe do Google no d
manuteno a essa implementao.

HttpUrlConnection,
que desenvolvido e suportado pelo Google.
7

Exemplo

JSON x XML
JSON e XML so formatos para a notao de
dados a serem transmitidos;
A maior e mais importante diferena entre eles
nesse momento, que o XML acaba ocupando
muito mais espao 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 mveis, por
consumir menos banda da conexo de internet
do usurio.
9

10

JSON (JavaScript Object Notation)


JSON ganhou muita fora como o formato mais
utilizado no retorno de webservices, devido a
sua simplicidade em comparao com XML.
Android possui bibliotecas padro para lidar
com JSON:

JSONObject: lida com um objeto em JSON e

JSONArray: usada em arrays de objetos JSO

11

Transformando JSON em
Objetos Java (Native JSON)

{
"cpf": "111222333-00",
"endereco": "Rua das ruas, 9",
"id": "1",
"nome": "Alexandre Dumas"
}
12

Transformando JSON em
Objetos Java (Google GSON)

{
"cpf": "111222333-00",
"endereco": "Rua das ruas, 9",
"id": "1",
"nome": "Alexandre Dumas"
}
13

JSON (JavaScript Object Notation)


JSON ganhou muita fora como o formato mais
utilizado no retorno de webservices, devido a
sua simplicidade em comparao com XML.
Android possui bibliotecas padro para lidar
com JSON.Existem duas classes que so
utilizadas com este propsito, JSONObject e
JSONArray.
A primeira serve para lidar com umobjeto em
JSON, enquanto a segunda usada em arrays
de objetos JSON.
14

ExemploJSON
{

"id": "0001",
"name": "Curso de Android",
"about": "www.facom.ufu.br - contato: Prof. Bacal",
"info": "Programao para Dispositivos Mveis usando Android",
"location": {
"city": "Uberlndia",
"country": "Brasil",
"street": "Campus Santa Mnica - Lab B4 - Bloco B",
"zip": "38400.000"
},
"website": "http://www.facom.ufu.br/~bacala/ANDROID",

15

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

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

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

Executando operaes de rede


em um segmento separado
Operaes de rede podem implicar em
atrasos imprevisveis. Para evitar que isso
cause uma m impresso do usurio,
sempre execute operaes 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

AsyncTask
Encapsula em uma interface simples o uso de
threads.
Deve implementar obrigatoriamente o mtodo
doInBackground(), que exatamente a tarefa
que est sendo executada em background.
Caso necessrio alguma atualizao na
interface, s sobrescrever o mtodo
onPostExecute(). Tudo que estiver dentro deste
mtodo executado na UI thread.
O mtodo onPreExecute() executado antes do
doInBackground() e tambm executado na UI
thread.
20

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 obtm e processa o contedo da pgina
web, retornando uma String.

OnPostExecute (): pega a String retornada e


exibe na UI.
21

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.");
}
22
}

// 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);
}

}
...

23

// 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();
}
}
}

24

Verificando a conexo de rede


Antes de seu aplicativo tenta se conectar
rede, ele deve verificar para ver se uma
conexo de rede est disponvel.
O dispositivo pode estar fora de alcance
de uma rede, ou o usurio pode ter
desativado tanto Wi-Fi e acesso a dados
mvel.
Use getActiveNetworkInfo() e
isConnected()
25

Verificando a conexo de rede


public boolean isOnline() {
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}

26

Lendo e convertendo em Texto


// 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);
}

Lendo uma imagem


InputStream is = null;
...
Bitmap bitmap = BitmapFactory.decodeStream(is);
ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setImageBitmap(bitmap);

No se esquea:
<uses-permission android:name ="android.permission.INTERNET"/> 27

Para maiores informaoes


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

28

WebServices
Soluo usada na integrao de sistemas e na
comunicao entre aplicaes diferentes.
Torna possvel que novas aplicaes possam
interagir com as j existentes e que sistemas
desenvolvidos em plataformas diferentes sejam
compatveis.
Componentes que permitem s aplicaes
enviar e receber dados em formato XML.

Cada aplicao pode ter a sua prpria "linguagem",


que traduzida para uma linguagem universal, o
formato XML.
29

WebServices
REST
Requisio via URL (GET ou POST)
Resposta em JSON, XML, etc.

SOAP- Simple Object Access Protocol


Requisio e resposta em XML
invocao remota de um mtodo que
necessita especificar o endereo do
componente, o nome do mtodo e os
argumentos para esse mtodo.

Estes dados so formatados em XML com determinadas


regras e enviados normalmente por HTTP para esse
30
componente.

SOAP (Simple Object Access Protocol)


Invocao remota de um mtodo necessitando

endereo do componente,

o nome do mtodo e

os argumentos para esse mtodo.

Dados formatados em XML e enviados por HTTP.


No define ou impe
qualquer semntica o
que o servio ou o cliente
sejam aplicaes
desenvolvidas por
diferentes linguagens.
31

SOAP (Simple Object Access Protocol)

WSDL descreve os servios disponibilizados rede


atravs de XML, que providencia a documentao
necessria para se chamar um sistema distribudo e o
procedimento para que esta comunicao se estabelea.

SOAP especifica a comunicao entre um cliente e um


servidor, o WSDL descreve os servios oferecidos..

32

REST (Transferncia de
Estado Representativo)

Tcnica de engenharia de software para sistemas


distribudos desenvolvida pelo Roy Fielding.

Pretendida como uma imagem do design da aplicao


se comportar:

uma rede de websites (um estado virtual),

onde o usurio progride com uma aplicao selecionando as


ligaes (transio de estado),

resultando na pgina seguinte (que representa o estado


seguinte da aplicao) que est sendo transferida ao usurio e
apresentada para seu uso.

Sistemas que seguem os princpios REST so


conhecidos como RESTful.

Foco na URL e nos recursos.


33

REST

O principal em um Web Service RESTful so as URLs e


os recursos.

Recurso ou entidade, ou seja, um objeto com informao que


ser representado por meio de um XML.

a URL para acessar esse recurso ser sempre a mesma, porm


caso mudemos o mtodo HTTP (GET, POST, PUT e DELETE) o
resultado da requisio ser diferente.

34

Implementando um simples
REST Client no Android

35

Implementando um simples
REST Client no Android

36

Implementando um simples
REST Client no Android

37

Mais Informaes
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

Você também pode gostar