+ Treinamento em Android. + 6. Programação para internet.

40
+ Treinamento em Android

Transcript of + Treinamento em Android. + 6. Programação para internet.

Page 1: + Treinamento em Android. + 6. Programação para internet.

+

Treinamento em Android

Page 2: + Treinamento em Android. + 6. Programação para internet.

+6. Programação para internet

Page 3: + Treinamento em Android. + 6. Programação para internet.

+Obtendo conteúdo de uma URL

Project Name: AplicacaoRecebConteudo

Package Name : br.ufpe.cin.android.apprecebcont

Create Activity: AppContent

Application Name: Aplicação URL 1

Min SDK Version: 10

Page 4: + Treinamento em Android. + 6. Programação para internet.

+Obtendo conteúdo de uma URL

main.xml

EditText Id:@+id/edurlLayout width: fill_parentButton Id: @+id/btsmostrar, Layout width: fill_parentText: Somar

Page 5: + Treinamento em Android. + 6. Programação para internet.

+Obtendo conteúdo de uma URL

AppContent.javapublic void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);edurl = (EditText) findViewById(R.id.edurl);btmostrar = (Button) findViewById(R.id.mostrar);btmostrar.setOnClickListener(new View.OnClickListener(){

public void onClick(View v) {try{String strurl = edurl.getText().toString();URL url = new URL(strurl);InputStream is = url.openStream();int i;

Page 6: + Treinamento em Android. + 6. Programação para internet.

+Obtendo conteúdo de uma URL

String conteudo="";while((i = is.read()) != -1)conteudo+= ((char)i);AlertDialog.Builder dialogo = newAlertDialog.Builder(AppContent.this);dialogo.setMessage(conteudo);dialogo.setTitle("Conteúdo");dialogo.setNeutralButton("OK", null);dialogo.show();

}catch(Exception e) { }}

});}

Page 7: + Treinamento em Android. + 6. Programação para internet.

+Obtendo conteúdo de uma URL

No arquivo AndroidManifest.xml, antes da tag </manifest>, coloque a tag abaixo:

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

Page 8: + Treinamento em Android. + 6. Programação para internet.

+Envio de informações para uma URL

Project Name: AplicacaoEnviaConteudo

Package Name : br.ufpe.cin.android.appenviacont

Create Activity: AppSend

Application Name: Aplicação URL 2

Min SDK Version: 10

Page 9: + Treinamento em Android. + 6. Programação para internet.

+Enviando informações para uma URL

main.xml

EditText Id:@+id/nomeLayout width: fill_parentTextView Text: IdadeEditTextId: @+id/idadeLayout width: fill_parentButton Id: @+id/btsenviar, Layout width: fill_parent, Text: Enviar Dados

Page 10: + Treinamento em Android. + 6. Programação para internet.

+Enviando informações para uma URL

AppContent.javapublic void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);Button b = (Button)findViewById(R.id.btenviar);b.setOnClickListener(newView.OnClickListener(){public void onClick(View v) {

TextView txtnome = (TextView) findViewById(R.id.nome);TextView txtidade = (TextView) findViewById(R.id.idade);String nome = txtnome.getText().toString();String idade = txtidade.getText().toString();nome = URLEncoder.encode(nome);

Page 11: + Treinamento em Android. + 6. Programação para internet.

+Enviando informações para uma URL

try{URL url = new URL("http://www.lfliborio.com.br/android/php/cadastrar_dados.php?nome=" + nome + "&idade=" + idade);url.openStream();AlertDialog.Builder d = new AlertDialog.Builder(AppSend.this);d.setMessage("Dados enviados com sucesso.");d.setNeutralButton("OK", null);d.setTitle("Resultado");d.show();

}catch(Exception e) {AlertDialog.Builder d = new AlertDialog.Builder(AppSend.this);d.setMessage(e.toString());d.setNeutralButton("OK", null);d.setTitle("Erro");d.show();

}}

});}

Page 12: + Treinamento em Android. + 6. Programação para internet.

+Enviando informações para uma URL

No arquivo AndroidManifest.xml, antes da tag </manifest>, coloque a tag abaixo:

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

Page 13: + Treinamento em Android. + 6. Programação para internet.

+Desafio!

Baixem a aplicação AppCadastro;

Queremos agora armazenar os dados a serem cadastrados em um banco de dados remoto;

Usaremos duas páginas Web: www.lfliborio.com.br/android/php/cadastrar_dados.php:

Receberá os parâmetros nome,idade e profissao, para inserir no BD;

www.lfliborio.com.br/android/php/get_pessoa.php: Retornará o registro com a posição indicada pelo parâmetro id (inciando de zero)

Page 14: + Treinamento em Android. + 6. Programação para internet.

+Fazendo download de um arquivo

Project Name: AplicacaoDownload

Package Name : br.ufpe.cin.android.appdownload

Create Activity: AppDownload

Application Name: Aplicação Download

Min SDK Version: 10

Page 15: + Treinamento em Android. + 6. Programação para internet.

+Fazendo download de um arquivo

main.xml

ButtonId: @+id/btdownloadLayout width: fill_parentText: Baixar imagemTextView Text: ImagemImageView

Id: @+id/imagemSrc:<vazio>Layout: height wrap_contentLayout width: wrap_content

Page 16: + Treinamento em Android. + 6. Programação para internet.

+Fazendo download de um arquivo

AppDownload.javapublic void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);Button b = (Button)findViewById(R.id.btdownload);b.setOnClickListener(new View.OnClickListener(){

public void onClick(View v) {ImageView imagem = (ImageView) findViewById(R.id.imagem);try {

URL url = new URL("http://www.lfliborio.com.br/android/php/logo.png");InputStream is = url.openStream();Bitmap bmp = BitmapFactory.decodeStream(is);imagem.setImageBitmap(bmp);

Page 17: + Treinamento em Android. + 6. Programação para internet.

+Fazendo download de um arquivo

} catch (Exception e) {AlertDialog.Builder d = newAlertDialog.Builder(AppDownload.this);d.setMessage(e.toString());d.setTitle("Aviso");d.setNeutralButton("OK", null);d.show();

}}

});}

Page 18: + Treinamento em Android. + 6. Programação para internet.

+Fazendo download de uma arquivo

No arquivo AndroidManifest.xml, antes da tag </manifest>, coloque a tag abaixo:

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

Page 19: + Treinamento em Android. + 6. Programação para internet.

+Melhorando!

Voltemos a nossa aplicação de galeria de imagem.

Vamos fazer a sua composição apenas de imagens retiradas da internet; http://www.lfliborio.com.br/android/php/lista_imagens.php

Nomes separados por vírgulas (“\\,”) As imagens estão em http://www.lfliborio.com.br/android/php/

Page 20: + Treinamento em Android. + 6. Programação para internet.

+O componente WebView

Esse componente WebView é muito utilizado quando queremos desenvolver um navegador próprio para o nosso dispositivo.

Embora o emulador já possua um Browser embutido, o Android fornece um componente próprio voltado para tal finalidade.

Ele funciona como um display onde podemos visualizar as páginas da internet.

Normalmente, o componente WebView é trabalhado em conjunto com o componente WebSettings.

Page 21: + Treinamento em Android. + 6. Programação para internet.

+Aplicação de cadastro

Project Name: AplicacaoBrowser

Package Name : br.ufpe.cin.android.appbrowser

Create Activity: AppBrowser

Application Name: Aplicação de Browser

Min SDK Version: 10

Page 22: + Treinamento em Android. + 6. Programação para internet.

+Aplicação de Browser

AppNavegador.javapublic void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);WebView w = new WebView(this);WebSettings ws = w.getSettings();ws.setSavePassword(false);ws.setSaveFormData(false);ws.setJavaScriptEnabled(true);ws.setSupportZoom(false);w.loadUrl("http://www.globo.com");setContentView(w);}

Page 23: + Treinamento em Android. + 6. Programação para internet.

+Aplicação de Browser

No arquivo AndroidManifest.xml, antes da tag </manifest>, coloque a tag abaixo:

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

Page 24: + Treinamento em Android. + 6. Programação para internet.

+7. Persistência

Page 25: + Treinamento em Android. + 6. Programação para internet.

+Programação com banco de dados

O Android tem suporte nativo a um banco de dados relacional: o SQLite (http://www.sqlite.org ).

Isto facilita muito o trabalho de armazenamento e leitura de dados no dispositivo.

Ao contrário de JME, o Android permite que dados sejam armazenados e recuperados da base de dados através de comandos SQL;

Page 26: + Treinamento em Android. + 6. Programação para internet.

+Programação com banco de dados

Além de que a base de dados existe fisicamente, podendo ser copiada do dispositivo para uma unidade de backup, por exemplo

Ou ainda, o banco de dados pode ser instalado no dispositivo já com os dados pré-carregados etc.

Page 27: + Treinamento em Android. + 6. Programação para internet.

+Criando o banco de dados

O comando abaixo cria o banco de dados, ou retorna a referência para o mesmo, caso já tenha sido criado.

SQLiteDatabase myDB = openOrCreateDatabase(DATABASE_NAME,

Context.MODE_PRIVATE,null);

Page 28: + Treinamento em Android. + 6. Programação para internet.

+A linguagem SQL

O SQL foi desenvolvido para ser uma linguagem padrão para operações com Banco de Dados.

A linguagem SQL foi elaborada para ser independente de hardware ou do software. Ao usar o SQL, você não precisa saber a respeito do software de

banco de dados ou do hardware envolvido em uma operação. Tudo o que você precisa conhecer são os comandos/instruções

SQL padrão para solicitar informações, que obrigatoriamente é o mesmo em todos os sistemas que utilizam o SQL.

Page 29: + Treinamento em Android. + 6. Programação para internet.

+CREATE TABLE

O comando CREATE TABLE é usado para criar uma tabela em um banco de dados.

CREATE [TEMPORARY] TABLE IF NOT EXISITS [tabela] ([ [coluna1] [tipo de dado1] {NULL|NOT NULL}...])

Page 30: + Treinamento em Android. + 6. Programação para internet.

+INSERT

O comando INSERT é usado para adicionar um ou mais registros em tabela de um banco de dados.

INSERT INTO tabela (coluna1, [coluna2, ...]) VALUES (valor1, [valor2, ...])

Page 31: + Treinamento em Android. + 6. Programação para internet.

+UPDATE

O comando UPDATE é usado para atualizar registros em uma ou mais tabelas do banco de dados.

UPDATE tabela SET campo1 = valor1 [,campo2 = valor2,...] [WHERE condição]

Page 32: + Treinamento em Android. + 6. Programação para internet.

+DELETE

O comando DELETE é utilizado para remover um ou mais registros de uma tabela no banco de dados.

DELETE FROM tabela [WHERE condição]

Page 33: + Treinamento em Android. + 6. Programação para internet.

+SELECT

O comando SELECT é utilizado para recuperar um conjunto de registros de uma ou mais tabelas. Ela recupera zero ou mais linhas, dependendo das condições colocadas.

SELECT [DISTINCT] * | expressão [ AS nome_saída ] [, ...]

[ FROM tabela1 [t1, tabela2 t2 ...] [ WHERE condição ] [ GROUP BY expressão [, ...] ] [ ORDER BY expressão [ ASC | DESC] [, ...] ] [ LIMIT { contador | ALL } ]

Page 34: + Treinamento em Android. + 6. Programação para internet.

+Exemplos de SQL usando Android

O comando abaixo pode ser usado para executar as funções do banco de dados:

É importante ressaltar que este comando deve ser usado para consultas que NÃO retornam dados (todas as outras, exceto o SELECT).

myDB.execSQL(String query)

Page 35: + Treinamento em Android. + 6. Programação para internet.

+Exemplos de SQL usando Android

Para executar um SELECT, utilizamos o seguinte método:

myDB.query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

Page 36: + Treinamento em Android. + 6. Programação para internet.

+Exemplos de SQL usando Android

Como exemplos, iremos mostrar o comportamento da função com os comandos INSERT e SELECT.

String TABLE_NAME = "pessoa";String nome = "Nome";String sobreNome = "Sobrenome" ;String pais = "Pai e Mãe";Integer idade = 22;myDB.execSQL("INSERT INTO" +TABLE_NAME +"(nome, sobrenome, pais, idade)" +" VALUES " +"('" + nome + "'," +"'" + sobreNome + "'," +"'"+ pais + "'," +idade + ");");

Page 37: + Treinamento em Android. + 6. Programação para internet.

+Exemplos de SQL usando Android

Cursor c = myDB.query(TABLE_NAME,newString[] {"nome", "sobrenome", "pais", "idade"},null,null,null,null,null);if(c !=null) {

while( ! c.isAfterLast() ) {if( c.getPosition() == -1 ) {c.moveToFirst();}int posColunaNome = c.getColumnIndex("nome");int posColunaSobreNome = c.getColumnIndex("sobrenome");int posColunaPais = c.getColumnIndex("pais");int posColunaIdade = c.getColumnIndex("idade");String nome = c.getString(posColunaNome);String sobrenome = c.getString(posColunaSobreNome);String pais = c.getString(posColunaPais);intidade = c.getInt(posColunaIdade);c.moveToNext();

}}

Page 38: + Treinamento em Android. + 6. Programação para internet.

+Melhorando!

Voltemos mais uma vez para a nossa aplicação de cadastro (a primeira versão);

Faça com que a aplicação armazene os dados em um banco de dados dentro do dispositivo Android;

Page 39: + Treinamento em Android. + 6. Programação para internet.

+Melhorando! [2]

Implemente um mecanismo que faça a sincronização do banco de dados remoto (usado nos exemplos de Internet) com o banco de dados local.

Implemente uma tela de atualização, com um botão para realizar a ação e um texto indicando a quantidade de registros no banco de dados;

Page 40: + Treinamento em Android. + 6. Programação para internet.

+Melhorando! [2]

CREATE TABLE IF NOT EXISTS pessoa (nome varchar(100) NOT NULL, idade int (11) NOT NULL, profissao varchar(100) NOT NULL)