android - conceitos básicos

80
Programação Orientada a Objetos em Java Android Horácio Fernandes <[email protected]> Universidade Federal do Amazonas Instituto de Computação IEC481 – Projeto de Programas

Upload: julia-pacheco

Post on 27-Sep-2015

26 views

Category:

Documents


5 download

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.

TRANSCRIPT

  • 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('[email protected]','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