View
27
Download
5
Category
Preview:
DESCRIPTION
Conceitos básicos de Android.Aulas de conceitos básicos de programação orientada a objetos em Java. Introdução ao desenvolvimento de aplicativos mobiles utilizando Android.Ambiente de desenvolvimento utilizado: Eclipse;Sistema Operacional: Linux.
Citation preview
Programao Orientada a Objetos em Java
Android
Horcio Fernandes
Universidade Federal do AmazonasInstituto de ComputaoIEC481 Projeto de Programas
AndroidIntroduo
Programado em Java
FOSS Free Open Source Software
Usa o modelo MVC Model, View, Controller Modelo: classes implementadas em Java
View: componentes da Interface normalmente feitos em XML
Controller: implementados em Java, instanciam os modelos a controlam as views. So conhecidas como activities no Android
Controller
Model(classes, BD)
View(UI, layout)
Mensagens
Dados
Atualiza
Mostra
Eventos
AndroidPassos para Desenvolvimento
Configurao
Instalaodo SDK
Configuraodo Eclipse
Configuraodo AVD
Desenvolvimento
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Configurao do Ambientede Desenvolvimento
(Ubuntu)
Instalaodo SDK
Configuraodo Eclipse
Configuraodo AVD
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Configurao do Ambientede Desenvolvimento
(Ubuntu)
Instalaodo SDK
Configuraodo Eclipse
Configuraodo AVD
AndroidInstalao do Android SDK Tools
Download do SDK: https://developer.android.com/sdk/
SDK Tools Only Linux
Aceitar Licena e Fazer Download
Instalando:#tarxvfandroidsdk_r21.1linux.tgz#cdandroidsdklinux#./tools/android
AndroidInstalao do Android SDK Tools
Selecione os pacotes:
Platform-tools ltimo API
Install n packages... Talvez seja
necessrio clicar neste boto nova-mente depois(e depois) para aceitaras licenas.
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Configurao do Ambientede Desenvolvimento
(Ubuntu)
Instalaodo SDK
Configuraodo Eclipse
Configuraodo AVD
AndroidConfigurao do Eclipse
O Android disponibiliza um Plugin para o Eclipse: Android Development Tools (ADT)
Instalao do Android Development Tools (ADT): Inicie o Eclipse
Help Install New Software Clique em Add
Name: ADT Plugin Location: https://dl-ssl.google.com/android/eclipse/
Seleciona Developer Tools Next, Next, Accept, Finish
AndroidConfigurao do Eclipse
Configurao do ADT: Reinicie o Eclipse
Na Janela Welcome to Android Development Selecione Use existing SDKs Browse
Selecione o diretrio aonde o android foi descompactado Next, Finish
Android Instalado! Eclipse Configurado!
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Configurao do Ambientede Desenvolvimento
(Ubuntu)
Instalaodo SDK
Configuraodo Eclipse
Configuraodo AVD
AndroidConfigurao do AVD
Android Virtual Device (AVD) Emulador que permite executar
os aplicativos em sua mquina como se fosse em um dispositivo Android
Criando um novo AVD: No Eclipse, Window
Android Virtual Device Manager Clique em New
Preencha os dados Ok
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
Criao de um novo Projeto no Eclipse: File New Other
Android Application Project
Preenche Dados
Next Next Next Finish
AndroidHello World Criao do Projeto
InterfaceGrfica (UI)Interface
Grfica (UI)
Componentesda UI
Componentesda UI
XML da UIXML da UI
Cdigo Fonte(classes,pacotes)
Cdigo Fonte(classes,pacotes)
Recursos(imagens,layouts)
Recursos(imagens,layouts)
AndroidManifest(configs,
componentes)
AndroidManifest(configs,
componentes)
AndroidEclipse Ambiente de Desenvolvimento
Organiz.do LayoutOrganiz.
do Layout
Props. doComponente
Props. doComponente
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
Inicia a mquina virtual Window Android Virtual Device Manager Seleciona o AVD Start Launch
AndroidHello World Execuo no AVD
Compila e Executa o App Clica no Projeto
(lado esquerdo)
Run Run As Android Application
AndroidHello World Execuo no AVD
Conecta o celular via USB Habilita Depurao de USB no
dispositivo Opes Opes de Desenvolvedor
Opes de desenv. Depurao de USB OBS: Em alguns celulares, este passo pode
ser diferente
No Eclipse, Run Run As Android Application O Eclipse detecta seu celular conectado
Instala e inicia o App no celular
AndroidHello World Execuo no Celular
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
A interface grfica pode ser feita de trs formas: Usando o Editor do Eclipse (Graphical Layout)
O editor ir gerar um XML do Layout automaticamente
Editando o XML do Layout manualmente O Android faz um parse do XML do Layout e gera internamente os objetos dos
componentes (Views). Este processo conhecido como inflate. Toda tag XML tem uma classe Java correspondente (subclasse da classe View)
Gerando Cdigos em Java manualmente Instanciando objetos de componentes grficos (Views) manualmente e
adicionando-os interface (similar ao feito no Swing) No recomendado pelo Google. Exceo: nos casos em que as propriedades
dos componentes so calculadas dinamicamente
AndroidInterface Grfica
Do Graphical Layout ao XML
AndroidInterface Grfica
Todo componente UI (botes, textos, etc) deve estar dentro de um ViewGroup
ViewGroup: Agrupa componentes UI (Views) relacionados
Pode ter outros ViewGroups internamente (que agruparo outras Views) Define o layout dos elementos internos
Como ficaro dispostos na tela
Principais Layouts: RelativeLayout
LinearLayout
AndroidInterface Grfica Layouts
Posiciona os elementos de forma relativa
AndroidInterface Grfica RelativeLayout
AndroidInterface Grfica Recursos
Recursos: Imagens, Strings, XML de Layouts, Menus, Dimenses, Estilos, etc
Recursos so externalizados do seu cdigo para serem mantidos independentemente e mais facilmente. Os recursos ficam na pasta res
Exemplo de recursos de Strings (res/values/strings.xml)
So acessados pelo nome usando o @:
HelloWorldAppSettingsHelloworld!
AndroidInterface Grfica Elementos UI
Componentes UI so chamados de Views, pois todas as classes que as implementam herdam a classe View
Algumas Views: TextView EditText RadioGroup / RadioButton Button CheckBox ImageView
AndroidInterface Grfica TextView
Adiciona um texto (label)
Adicionar ou usarum recurso de
String
Adicionar ou usarum recurso de
String
AndroidInterface Grfica EditText
Adiciona um campode texto de entrada editvel
Diversos tipos: textEmailAddress
textPassword
textUri
number
phone
datetime
Id: identificador docampo, ser usado
para acessar o valordentro do Java
Id: identificador docampo, ser usado
para acessar o valordentro do Java
Tipo deEntradaTipo deEntrada
AndroidInterface Grfica RadioGroup / RadioButton
RadioGroup agrupa RadioButtons relacionados
RadioGroupRadioGroup
AndroidInterface Grfica Button
Button
AndroidInterface Grfica ImageView
Imagens
Copiar imagemCopiar imagem
Mesma imagemem outras
resolues.Ser escolhida de acordo como dispositivo.
Mesma imagemem outras
resolues.Ser escolhida de acordo como dispositivo.
AndroidInterface Grfica Menu
Ao clicar no boto Menu do celular, a view do Menu mostrada res/menu/main.xml
Adiciona um itemAdiciona um item
AndroidInterface Grfica Temas
Temas permitem mudar os estilos dos componentes da App Definio geral do tema: res/styles/styles.xml (pouco usado)
Def. dependente de dispositivo: res/stylesvXX/styles.xml (recomendado)
Theme.LightTheme.LightTheme.Holo.Light.DarkActionBarTheme.Holo.Light.DarkActionBar
AndroidInterface Grfica
Resultado Final MVC
Note como geramos a interface (View) sem necessidade de cdigos Java
Vamos agora Programar aes
Controllers Acessar BD
Models Gerar outras telas
Outros
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
Activity um componente da aplicao que permite: acesso a uma instncia da tela (interface) em que os componentes UI
podem ser acessados e controlados
interao do usurio com o aplicativo e resposta a eventos
instanciar classes (criar objetos) dos modelos implementados
Normalmente, uma aplicao em Android composta por diversas Activities Cada nova tela da aplicao uma activity Uma das activities ser a main, aberta quando a aplicao inicia Uma activity vai chamando a outra
Ao fazer isso, a activity anterior para de executar, mas seu estado guardado e, ao se pressionar o boto de voltar, ela volta ao estado anterior
No modelo MVC, activity prov a parte do controller
AndroidActivities
AndroidActivities
packageufam.icomp.helloworldapp;
importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;
publicclassMainActivityextendsActivity{
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//InflatethemenugetMenuInflater().inflate(R.menu.main,menu);returntrue;}}
Toda activity extende a classe Activity Principais
mtodos: onCreate onStart onCreateOptionsMenu onPause onResume onStop
Mostra a telaactivity_main,
que criamos naparte anterior
Mostra a telaactivity_main,
que criamos naparte anterior
Cria o menuCria o menu
AndroidActivities Ciclo de Vida
Ciclo de vida de uma Activity Este ciclo se repete para cada uma das activities
onCreate()
onStart()
onResume() onPause()onResume()
onStop()
onRestart()
onStart()
onDestroy()
Recuperada(visvel)
Pausada(parc. visvel)
Parada(invisvel)
Terminada(invisvel)
Iniciada(visvel)
App Criada(invisvel)
AndroidActivities Debug O LogCat, do Android, permite receber mensagens de debug
vindas da sua aplicao Para escrever: Log.i(Stringtag,Stringmsg);
Para ler: Window Show View Other Android LogCat Para facilitar a leitura, crie um filtro para mostrar apenas as suas Tags Os erros do Java (incluindo as Excees), so tambm mostradas no LogCat,
mas recomendvel tambm criar um filtro para os errosd = debuge = errori = infov = verbw = warn
d = debuge = errori = infov = verbw = warn
Nota: pressioneCtrl+1 para importar a classeLog automatic.
Nota: pressioneCtrl+1 para importar a classeLog automatic.
AndroidActivities Debug e Ciclo de Vida
Mensagens de Debug nas diversas fases do clico de vida
App iniciada(onCreate)
App iniciada(onCreate)
Boto 'Home'PressionadoBoto 'Home'Pressionado
Retornando App
Retornando App
AndroidActivities Manipulando Eventos
Cada um dos componentes UI possui uma srie de eventos Botes podem ser clicados, campos de texto podem ser modificados, etc
Tais eventos so especificados no XML do Layout e executam um determinado mtodo implementado na Activity. Interface do mtodo: publicvoidnomeDoMetodo(Viewview)
View view contm o objeto do componente UI que gerou o evento
AndroidActivities Manipulando Eventos
Exemplo: mostra Ol ao clicar no boto Entrar
packageufam.icomp.helloworldapp;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;importandroid.view.View;importandroid.widget.Toast;
publicclassMainActivityextendsActivity{//onCreate,onCreateOptionsMenu
publicvoidentrarClicado(Viewview){Toast.makeText(getApplicationContext(),"Ol!",Toast.LENGTH_SHORT).show();}}
AndroidActivities Eventos do Menu
Quando uma opo do Menu clicada, o mtodo onOptionsItemSelected executado com a opo como arg.
publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseR.id.sobre:AlertDialog.Builderalert=newAlertDialog.Builder(this);alert.setMessage("HelloWorldAppv1.0").setNeutralButton("Ok",null).show();returntrue;default:returnsuper.onOptionsItemSelected(item);}}
Item clicadoItem clicadoQual item?Qual item?
Item'Sobre'Item
'Sobre'
Consti umaCaixa de
Alerta
Consti umaCaixa de
Alerta
AndroidActivities Eventos do Menu
AndroidActivities Acessando Dados da View
Conforme mencionado, no XML dos Layouts os recursos (incluindo as tags dos componentes UI) so acessados usando o @. Mas para se acessar tais componentes dentro do Java, usa-se a classe R.
A classe R gerada automaticamente e contm uma constante esttica (atributo de classe) para cada um dos recursos (strings, componentes UI, figuras, etc).
Exemplo (parcial) de uma classe R gerada automaticamente:
packageufam.icomp.helloworldapp;
publicfinalclassR{/*...*/publicstaticfinalclassid{publicstaticfinalintbotaoEntrar=0x7f080008;publicstaticfinalintimgIcomp=0x7f080009;publicstaticfinalintinputLogin=0x7f080003;publicstaticfinalintinputSenha=0x7f080004;publicstaticfinalintlabelLogin=0x7f080001;/*...*/}
Id do recursocampo de
Login
Id do recursocampo de
Login
packageufam.icomp.helloworldapp;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.Toast;
publicclassMainActivityextendsActivity{//onCreate,onCreateOptionsMenupublicvoidentrarClicado(Viewview){
EditTexteditText=(EditText)findViewById(R.id.inputLogin);
Stringlogin=editText.getText().toString();
Stringmsg="Ol"+login+"!!";
Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();}}
AndroidActivities Acessando Dados da View Uma vez que temos o ID do recurso no Java, podemos conseguir uma
referncia ao seu objeto na memria atravs do mtodo findViewById.
Ir apontarpara o objeto
da classeEditText
Ir apontarpara o objeto
da classeEditText
Acessa o valordo campo
Acessa o valordo campo
necessriofazer um cast necessriofazer um cast
AndroidIntents Abrindo outras Activities
Um Intent prov uma ligao entre dois componentes que, em geral, so duas activities Indica uma inteno de fazer alguma coisa
A partir de agora, o boto Entrar, ir abrir uma nova activity Entretanto, precisamos criar essa nova activity (BemVidoActivity)
publicvoidentrarClicado(Viewview){Intentintent=newIntent(this,BemVindoActivity.class);startActivity(intent);}
IntenoInteno
ExecuoExecuo
AndroidIntents Criando uma nova Activity
No Eclipse File New Other Android Android Activity Blank Activity
O Eclipse ir criar e modificar os arquivos necessrios para o funcionamento da nova activity no Android
AndroidManifest.xml, res/values/strings.xml, res/menu/bem_vindo.xml, res/layout/activity_bem_vindo.xml, src/.../BemVindoActivity.java
AndroidIntents Teste
Testando o boto Entrar:
AndroidIntents Enviando Dados para a Activity
Para passar dados para a activity que ser aberta, usa-se o mtodo putExtra da classe Intent:
publicvoidentrarClicado(Viewview){Intentintent=newIntent(this,BemVindoActivity.class);
EditTextinputLogin=(EditText)findViewById(R.id.inputLogin);EditTextinputSenha=(EditText)findViewById(R.id.inputSenha);
RadioGroupgroupTipo=(RadioGroup)findViewById(R.id.radioGroupTipo);RadioButtonradioSelected=(RadioButton)findViewById(groupTipo.getCheckedRadioButtonId());Stringtipo=(String)radioSelected.getText();
intent.putExtra("login",inputLogin.getText().toString());intent.putExtra("senha",inputSenha.getText().toString());intent.putExtra("tipo",tipo);
startActivity(intent);}
IntentIntent
Acessandodados de
texto
Acessandodados de
texto
Acessandodados do
RadioGroup
Acessandodados do
RadioGroup
Passandodados paraa prxima
Activity
Passandodados paraa prxima
Activity
ExecutaExecuta
AndroidIntents Acessando Dados Enviados
Para acessar os dados na nova activity, usa-se o mtodo getStringExtra da classe Intent:
onCreate danova ActivityonCreate danova Activity
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_bem_vindo);
Intentintent=getIntent();Stringlogin=intent.getStringExtra("login");Stringsenha=intent.getStringExtra("senha");Stringtipo=intent.getStringExtra("tipo");TextViewtextBemVindo=(TextView)findViewById(R.id.textBemVindo);
textBemVindo.setText(Html.fromHtml("Ol"+login+"!Suasenha"+senha+"evoc"+tipo+".BemVindo!"));}
Acessa oIntent
Acessa oIntent
Acessa osdados enviados
Acessa osdados enviados
Acessa o labelde bem vindo
Acessa o labelde bem vindo
Muda o seu contedo
Muda o seu contedo
AndroidIntents Teste
Testando novamente o boto Entrar:
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
O Banco de Dados do Android o SQLite Suporta a comandos SQL, Leve
Dados so salvos em um nico arquivo local
J vem instalado Sem necessidade de usurio e senha. Entretanto, seus dados esto seguros,
pois s sero acessveis por sua App.
http://www.sqlite.org/
Hello World App
AndroidBanco de Dados
Usuario(modelo)
UsuarioDAO(Data Access Obj.)
BancoDeDados(Auxiliar)
Livro(modelo)
LivroDAO(Data Access Obj.)
Usuario
Stringlogin
Stringnome
Stringsenha
inttipo
Hello World App
AndroidBanco de Dados
Usuario(modelo)
UsuarioDAO(Data Access Obj.)
UsuarioDAO(Data Access Obj.)
BancoDeDados(Auxiliar)
BancoDeDados(Auxiliar)
Modelo Usuario src/ufam.icomp.helloworldapp/Usuario.java
AndroidBanco de Dados - Modelo
Usuario(modelo)
packageufam.icomp.helloworldapp;
publicclassUsuarioimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringlogin,nome,senha;privateinttipo;
publicUsuario(Stringlogin,Stringnome,Stringsenha,inttipo){this.login=login;this.nome=nome;this.senha=senha;this.tipo=tipo;}//GetterseSetters
publicStringgetTipoString(){if(this.tipo==1)return"Aluno";elsereturn"Professor";}}
Usuario
Stringlogin
Stringnome
Stringsenha
inttipo
Para passar umobjeto da classe
Usuario paraoutra Activity
Para passar umobjeto da classe
Usuario paraoutra Activity
Hello World App
AndroidBanco de Dados
Usuario(modelo)Usuario(modelo)
UsuarioDAO(Data Access Obj.)
UsuarioDAO(Data Access Obj.)
BancoDeDados(Auxiliar)
BancoDeDados(Auxiliar)
Auxiliar de Banco de Dados Cria o banco (quando necessrio)
Atualiza o banco (quando necessrio)
src/ufam.icomp.helloworldapp/BancoDeDados.java
AndroidBanco de Dados - Auxiliar
BancoDeDados(Auxiliar)
packageufam.icomp.helloworldapp;importandroid.content.Context;importandroid.database.sqlite.*;
publicclassBancoDeDadosextendsSQLiteOpenHelper{publicstaticfinalintDATABASE_VERSION=1;publicstaticfinalStringDATABASE_NAME="HelloWorldApp.db";
privatestaticfinalStringSQL_CREATE_TABLES="CREATETABLEUsuarios("+"loginTEXTPRIMARYKEY,nomeTEXT,senhaTEXT,tipoINT)";
privatestaticfinalStringSQL_POPULATE_TABLES="INSERTINTOUsuarios"+"VALUES('fulano@icomp.ufam.edu.br','FulanodeTal','teste123',2)";
privatestaticfinalStringSQL_DELETE_TABLES="DROPTABLEIFEXISTSUsuarios";
publicBancoDeDados(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);}
publicvoidonCreate(SQLiteDatabasedb){db.execSQL(SQL_CREATE_TABLES);db.execSQL(SQL_POPULATE_TABLES);}
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){db.execSQL(SQL_DELETE_TABLES);onCreate(db);}}
Verso do BD.Incr. ao modificar
Verso do BD.Incr. ao modificar
SQL para criaro BD
SQL para criaro BD
SQL parapopular o BD
SQL parapopular o BD
SQL paralimpar o BDSQL para
limpar o BD
Contexto aactivity
Contexto aactivity
Executado aocriar o BD
Executado aocriar o BD
Executado aoatualizar o BDExecutado aoatualizar o BD
Hello World App
AndroidBanco de Dados
Usuario(modelo)Usuario(modelo)
UsuarioDAO(Data Access Obj.)
UsuarioDAO(Data Access Obj.)
BancoDeDados(Auxiliar)
BancoDeDados(Auxiliar)
UsuarioDAO Construtor
abre o BD
publicUsuariogetUsuario(Stringlogin,Stringsenha) Pega os dados de um usurio do BD usando login/senha
publicbooleanaddUsuario(Usuariou) Adiciona um novo usurio no BD
publicCursorgetUsuarios() Retorna um cursor do BD com uma consulta aos usurios do sistema
AndroidBanco de Dados - UsuarioDAO
UsuarioDAO(Data Access Obj.)
AndroidBanco de Dados - UsuarioDAO
UsuarioDAO(Data Access Obj.)
//package,imports...
publicclassUsuarioDAO{privateSQLiteDatabasebancoDeDados;
publicUsuarioDAO(Contextcontext){this.bancoDeDados=(newBancoDeDados(context)).getWritableDatabase();}
publicUsuariogetUsuario(Stringlogin,Stringsenha){Usuariousuario=null;StringsqlQuery="SELECT*FROMUsuariosWHERE"+"login='"+login+"'ANDsenha='"+senha+"'";Cursorcursor=this.bancoDeDados.rawQuery(sqlQuery,null);
if(cursor.moveToNext()){usuario=newUsuario(login,cursor.getString(1),cursor.getString(2),cursor.getInt(3));}
cursor.close();returnusuario;}
//Continuaonoprximoslide...
Abre conexocom o BD
Abre conexocom o BD
Consulta SQLConsulta SQL
Se retornouuma linha
Se retornouuma linha
Retorna umobjeto Usuario
Retorna umobjeto Usuario
Executa ConsultaExecuta Consulta
publicbooleanaddUsuario(Usuariou){try{StringsqlCmd="INSERTINTOUsuariosVALUES('"+u.getLogin()+"',"+"'"+u.getNome()+"','"+u.getSenha()+"',"+u.getTipo()+")";this.bancoDeDados.execSQL(sqlCmd);returntrue;
}catch(SQLExceptione){
Log.e("HelloAppBD",e.getMessage());returnfalse;
}}
publicCursorgetUsuarios(){returnthis.bancoDeDados.rawQuery("SELECTrowidAS_id,"+"login,nome,"+"CASEWHENtipo=1THEN'Aluno'ELSE'Professor'ENDAStipo"+"FROMUsuariosORDERBYlogin",null);}
}//FimdaclasseUsuarioDAO
AndroidBanco de Dados - UsuarioDAO
UsuarioDAO(Data Access Obj.)
SQL para adicio-nar usurio
SQL para adicio-nar usurio
ExecutacomandoExecuta
comando
Retorna um cursorde uma consulta no BD
Retorna um cursorde uma consulta no BD
ConsultaConsultaUsado pelo
ListView(mais adiante)
Usado peloListView
(mais adiante)
Hello World App
AndroidBanco de Dados
Usuario(modelo)Usuario(modelo)
UsuarioDAO(Data Access Obj.)
UsuarioDAO(Data Access Obj.)
BancoDeDados(Auxiliar)
BancoDeDados(Auxiliar)
Laytous eActivitiesLaytous eActivities
AndroidBanco de Dados Layouts e Activities
Agora que criamos as classes necessrias para manipular os modelos e o banco de dados
Vamos mudar/criar os Layouts e Activities necessrios para: Verificar login/senha e acessar dados do usurio
Adicionar um novo usurio
Listar usurios cadastrados
AndroidBanco de Dados Verificar login/senha
Mudando a MainActivity para checar o login/senhapublicvoidentrarClicado(Viewview){
Intentintent=newIntent(this,BemVindoActivity.class);EditTextinputLogin=(EditText)findViewById(R.id.inputLogin);EditTextinputSenha=(EditText)findViewById(R.id.inputSenha);
//VerificaasenhaUsuarioDAOusuarioDAO=newUsuarioDAO(this);Usuariousuario=usuarioDAO.getUsuario(inputLogin.getText().toString(),inputSenha.getText().toString());
if(usuario!=null){
intent.putExtra("usuario",usuario);startActivity(intent);
}else{Toast.makeText(this,"Usurioe/ouSenhainvlidos!",Toast.LENGTH_SHORT).show();}
}
Pega o usurio com o login/senha
Pega o usurio com o login/senha
Login/senhacorretos
Login/senhacorretos
Passa o usurioretornado para a
nova Activity
Passa o usurioretornado para a
nova Activity
Teste da nova MainActivity
AndroidBanco de Dados Verificar login/senha
BDBD
AndroidBanco de Dados Adicionar um novo usurio
Mudando a MainActivity para capturar o evento de pressionar o Menu Novo Usurio
publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){
caseR.id.novo_usuario: Intentintent=newIntent(this,NovoUsuarioActivity.class);startActivity(intent);returntrue;
caseR.id.sobre: AlertDialog.Builderalert=newAlertDialog.Builder(this);alert.setMessage("HelloWorldAppv1.0").setNeutralButton("Ok",null).show();returntrue;caseR.id.configs:returntrue;default:returnsuper.onOptionsItemSelected(item);}}
Inicia a ActivityNovoUsuarioActivity
Inicia a ActivityNovoUsuarioActivity
AndroidBanco de Dados Adicionar um novo usurio
Layout da ActivityNovoUsuario:
inputNovoLogininputNovoLogin
inputNovoNomeinputNovoNome
inputNovaSenhainputNovaSenha
radioGroupNovoTiporadioGroupNovoTipo
android:onClick="cadastrarUsuario"android:onClick="cadastrarUsuario"
AndroidBanco de Dados Adicionar um novo usurio
//package,imports,publicclass
publicclassNovoUsuarioActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_novo_usuario);}
publicvoidcadastrarUsuario(Viewview){EditTextinputLogin=(EditText)findViewById(R.id.inputNovoLogin);EditTextinputNome=(EditText)findViewById(R.id.inputNovoNome);EditTextinputSenha=(EditText)findViewById(R.id.inputNovaSenha);RadioGroupgroupTipo=(RadioGroup)findViewById(R.id.radioGroupNovoTipo);inttipo=groupTipo.getCheckedRadioButtonId()==R.id.novoTipoAluno?1:2;
Usuariousuario=newUsuario(inputLogin.getText().toString(),inputNome.getText().toString(),inputSenha.getText().toString(),tipo);
UsuarioDAOusuarioDAO=newUsuarioDAO(this);if(usuarioDAO.addUsuario(usuario))Toast.makeText(this,"Usuriocriado!",Toast.LENGTH_SHORT).show();elseToast.makeText(this,"Erroaocriarusurio!",Toast.LENGTH_SHORT).show();finish();}}
Ao clicar no boto cadastrar
Ao clicar no boto cadastrar
Acessa osinputs
Acessa osinputs
Cria o objetodo usurio
Cria o objetodo usurio
Adiciona ousurio no BD
Adiciona ousurio no BD
Volta Activityanterior
Volta Activityanterior
AndroidBanco de Dados Adicionar um novo usurio
Teste
AndroidBanco de Dados Listando Usurios
Mudando a view da BemVindoActivity para adicionar um boto para Listar Usurios
//BemVindoActivity.javapublicvoidabrirListarUsuarios(Viewview){Intentintent=newIntent(this,ListarUsuariosActivity.class);startActivity(intent);}
onClickonClick
AndroidBanco de Dados Listando Usurios
Criando a ListarUsuariosActivity Android possui uma classe de Activity especfica para os casos em que a
view contm uma lista: a ListActivity
Para criar uma nova ListActivity: Crie uma Activity normal
File New Other Android Android Activity Blank Activity
Faa-a estender a classe ListActivity A classe ListActivity extende a classe Activity
AndroidBanco de Dados Listando Usurios
View: No h necessidade de modificar a view da activity, pois a ListActivity
ir criar automaticamente o componente UI para a lista
Entretanto, precisamos definir a view que cada uma das linhas da lista ter File New Other Android Android XML Layout File
File: usuario_linha.xml Root Element: RelativeLayout
Ignore, poisfaz parte do
tema
Ignore, poisfaz parte do
temaCada linha da lista
ter essa formataoe layout
Cada linha da listater essa formatao
e layout
Os ids serousados parasubstituir os
valores
Os ids serousados parasubstituir os
valores
publicclassListarUsuariosActivityextendsListActivity{privateUsuarioDAOusuarioDAO;privateCursorAdapterdados;
protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);this.usuarioDAO=newUsuarioDAO(this);
dados=newSimpleCursorAdapter(this,R.layout.usuario_linha,usuarioDAO.getUsuarios(),newString[]{"login","nome","tipo"},newint[]{R.id.usuario_linha_login,R.id.usuario_linha_nome,R.id.usuario_linha_tipo},0);
setListAdapter(dados);}
publicvoidonListItemClick(ListViewl,Viewv,intpos,longid){TextViewtextLogin=(TextView)v.findViewById(R.id.usuario_linha_login);Toast.makeText(this,"Usurio"+textLogin.getText().toString(),Toast.LENGTH_SHORT).show();}}
Acesso aosdados do BDAcesso aos
dados do BD
Fonte de dadosda Lista
Fonte de dadosda Lista
Ligao entreo BD e a ListaLigao entreo BD e a Lista
Layout decada LinhaLayout decada Linha
Dados do BDDados do BD
Mapeamento dascolunas do BD paraos campos da View
Mapeamento dascolunas do BD paraos campos da View
Executado ao clicarem uma Linha
Executado ao clicarem uma Linha
Teste
AndroidBanco de Dados Listando Usurios
Universidade Federal do AmazonasInstituto de ComputaoICC005 Tcnicas de Programao
Desenvolvimento emAndroid
Hello WorldApp
Execuodo App
InterfaceGrfica
Activities eIntents
Banco deDados
TpicosAvanados
AndroidTpicos Avanados
Configuraes e Preferncias Servios Baseados em Localizao
GPS, Mapas
Sensores Acelermetro, Giroscpio, Luminosidade, Magnetmetro
Multimdia Cmera, Vdeo, Voz
Telefonia Contatos, SMS
AndroidReferncias
Training for Android Developers http://developer.android.com/training/
Android API Guide http://developer.android.com/guide/components/
Android API Reference http://developer.android.com/reference/
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73Slide 74Slide 75Slide 76Slide 77Slide 78Slide 79Slide 80
Recommended