Programação Para Dispositivos Moveis
Prof. Charles Fortes
PDM
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Charles Fortes
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Charles Fortes
Líder Técnico na Empresa Prime Systems.
Agilista, apaixonado por desenvolvimento
(Web, Desktop, Mobile, o que for), pai,
amante do Paintball e do Kenjutsu. MTAC -
Microsoft Technical Audience Contributor
100Loop - DotNetRaptors
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Charles Fortes
Líder Técnico na Empresa Prime Systems.
Agilista, apaixonado por desenvolvimento
(Web, Desktop, Mobile, o que for), pai,
amante do Paintball e do Kenjutsu. MTAC -
Microsoft Technical Audience Contributor
100Loop - DotNetRaptors
SlideShare: http://pt.slideshare.net/charleswellingtonfortes
Linkedin: http://br.linkedin.com/in/charlesfortes/
Twitter: @CharlesFortes
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Charles Fortes
Líder Técnico na Empresa Prime Systems.
Agilista, apaixonado por desenvolvimento
(Web, Desktop, Mobile, o que for), pai,
amante do Paintball e do Kenjutsu. MTAC -
Microsoft Technical Audience Contributor
100Loop - DotNetRaptors
Desenvolvimento Web – MVC – Angular.JS – JQuery – SQLServer – MySQL – HTML5 – NoSQL
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Android Manifest
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Manifest
tem a função de ser o principal arquivo de configuração do seu aplicativo
- Icone
- Nome
- Telas
- Permissões
- Dominio
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Layout
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Layout
A arquitetura de interface gráfica do Android é baseada no padrão de projetos MVC (Model – View –
Controller).
Onde a camada Model, é responsável pelas regras de negócio da aplicação. A Camada de View, é
responsável pela interface gráfica. E a camada de Controller gerencia os eventos de uma determinada
tela.
A grande vantagem proporcionada por este padrão é a modularidade. Ou seja, conseguimos alterar
todo um layout de uma determinada tela sem mexer no código que diz respeito ao comportamento da
mesma.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Layout
Imaginando uma tela de login, a cor da tela, o tamanho e a fonte dos botões, tudo que diz respeito a
interface gráfica é definido na camada View.
Já o que irá acontecer quando os botões forem clicados será ministrado pela camada de Controller.
No Android, os layouts XML assumem o papel de View.
As Activitys assumem o papel de Controller.
E a classe R, faz a ligação entre as duas camadas, permitindo o acesso de recursos encontrados na pasta
Res nas Activitys do projeto.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Layout
Nota: Você pode criar componentes gráficos diretamente na Activity, sem a necessidade da criação de
um layout.xml. No entanto a modularidade citada acima seria perdida.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Layout
LinearLayout: Este ViewGroup é um dos mais populares. Irá organizar os componentes com base na sua
característica orientation.
A tag orientation pode receber vertical ou horizontal.
Caso o orientation estiver configurado como vertical, os componentes serão exibidos um em cima do
outro.
Caso esteja horizontal, os componentes serão exibidos um ao lado do outro.
TableLayout: Esse layout organiza os componentes no formato de tabelas. Colunas e linhas.
RelativeLayout: Esse layout organiza os componentes de um modo mais livre. A definição de onde o
componente vai ficar, será definida no própria View.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Activities
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Activity
A parte comportamental, como ações de um botão ficam a cargo do Controller no caso do Android
representado pela classe Activity.
Sobrescrevemos o método onCreate da Activity, é nele que vincularemos o layout xml que criamos
anteriormente.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Activity
Pitágoras
1
2
3
4
5
6
7
8
9
public class ExemploActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.exemplo_layout);
}
}
Programação Orientada a Objetos
Prof. Charles Fortes
Activity
Toda Activity é criada, fica em contato com o usuário, em algum momento pode ser interrompida
(como em um telefonema), em seguida pode ser restaurada ou destruída.
Este é o ciclo de vida de uma Activity, e cada etapa descrita acima é marcada por um método.
Assim que uma Activity é criada, o método onCreate(Bunde instanceSaved) é acionado. É neste
momento que o desenvolvedor deve criar a interface gráfica que irá ficar em contato com o usuário.
Daí a necessidade de chamar o método setContentView neste ponto, pois é ele que faz o vinculo
do Layout.xml com a Activity.
Quando uma Activity é totalmente destruída o método onDestroy() é acionado. Este é o momento
ideal para a liberação dos recursos que estavam sendo consumidos pela Activity.
Por exemplo: Caso esta Activity esteja exibindo um vídeo via streaming por exemplo, este é o momento
de cancelar a conexão e liberar o consumo de memória realizada pelo visualizador de vídeo.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Classe R
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
R
Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Intents
Pitágoras
http://developer.android.com/intl/pt-br/guide/components/intents-filters.html
Programação Orientada a Objetos
Prof. Charles Fortes
Intents
Intents são declarações de intenções para o sistema do dispositivo, que pode ser usada dentre outras
coisas, desde uma simples troca de tela, acesso a um componente do dispositivo ou a outros
aplicativos.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Intents
Intent intent = new Intent(this, OutraAtividade.class);
startActivity(intent);
------------------------------------
Uri uri = Uri.fromFile(new File("/sdcard/minhaaplicacao/hello_camera.jpg"));
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivity(intent);
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
URI
https://pt.wikipedia.org/wiki/URI
A URI (um objeto Uri) que referencia os dados a serem aproveitados e/ou o tipo MIME desses
dados. O tipo dos dados fornecidos geralmente é determinado pela ação da intenção.
Ao criar uma intenção, em geral, é importante especificar o tipo de dados (seu tipo MIME) em
adição à URI.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
URI
https://pt.wikipedia.org/wiki/URI
A sintaxe URI é essencialmente um nome de conjunto URI como "HTTP", "FTP", "mailto", "URN", "tel",
"rtsp", "file" etc, seguido de um caractere dois pontos e, por fim, a parte específica do conjunto.
Exemplos de URIs Absolutas[editar | editar código-fonte]
• http://example.org/absolute/URI/with/absolute/path/to/resource.txt
• ftp://example.org/resource.txt
• file:////home/example/example.org/resource.txt
• urn:issn:1535-3613
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Extras - Bundles
Pares de valores-chave que carregam informações adicionais exigidas para realizar a ação solicitada.
Assim, como algumas ações usam determinados tipos de URIs de dados, outras também usam
determinados extras.
É possível adicionar dados extras com diversos métodos putExtra(), cada um aceitando dois
parâmetros: o nome principal e o valor. Também é possível criar um objeto Bundle com todos os
dados extras e, em seguida, inserir o Bundle na Intent com putExtras().
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Extras - Bundles
Por exemplo: ao criar uma intenção para enviar um e-mail com ACTION_SEND, é possível especificar
o recipiente "para" com a chave EXTRA_EMAIL e especificar o "assunto" com a chave
EXTRA_SUBJECT.
A classe Intent especifica diversas constantes EXTRA_* para tipos de dados padronizados. Se for
necessário declarar chaves extras (para intenções que seu aplicativo receba), certifique-se de incluir
o nome do pacote do aplicativo como prefixo. Por exemplo:
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Conexão com o Banco
Pitágoras
https://developer.android.com/training/basics/data-storage/databases.html#DeleteDbRow
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Um dos princípios mais importantes de bancos de dados do SQL é o esquema: uma declaração formal
de como o banco de dados é organizado. O esquema é refletido nas declarações SQL usadas na criação
do banco de dados
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Um conjunto de APIs está disponível na classe SQLiteOpenHelper. Ao usar esta classe para obter
referências para seu banco de dados, o sistema realiza operações de possível longa execução para criar
e atualizar o banco de dados apenas quando necessário e não durante a inicialização do aplicativo.
Basta chamar getWritableDatabase() ou getReadableDatabase().
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Pitágoras
public HeroRepository(Context context){
ConexaoHelper cn = new ConexaoHelper(context);
db = cn.getWritableDatabase();
}
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Para usar SQLiteOpenHelper, crie uma subclasse que substitua os métodos de retorno de chamada
onCreate(), onUpgrade() e onOpen(). Também é possível implementar onDowngrade(), mas não é
obrigatório.
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Pitágoras
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by charles.fortes on 11/05/2016.
*/
public class ConexaoHelper extends SQLiteOpenHelper {
public ConexaoHelper(Context context) {
super(context, "DBMarvel", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("Create table herois (nome text, poder text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table herois");
onCreate(db);
}
}
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
execSQL
executa um comando que não retorna resultado
rawQuery
recupera um cursor com os dados
Métodos da Canexão para Facilitar a Vida:
Insert Update Delete Query
db.insert("herois",null, valores);
dataBase.delete(NOME_TABELA, COLUNA_ID + " = ?", valoresParaSubstituir);
dataBase.update(NOME_TABELA, valores, COLUNA_ID + " = ?", valoresParaSubstituir);
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Cursor: Utilizado para percorrer os resultados da consulta e recuperar os itens
ContentValues: Lista de Chaves e Valores para Passagem de Parâmetros
Pitágoras
ContentValues values = new ContentValues();
values.put(COLUNA_MARCA, veiculo.getMarca());
values.put(COLUNA_MODELO, veiculo.getModelo());
values.put(COLUNA_PLACA, veiculo.getPlaca());
Programação Orientada a Objetos
Prof. Charles Fortes
SQLite
Pitágoras
private List<Veiculo> construirVeiculoPorCursor(Cursor cursor) {
List<Veiculo> veiculos = new ArrayList<Veiculo>();
if(cursor == null)
return veiculos;
try {
if (cursor.moveToFirst()) {
do {
int indexID = cursor.getColumnIndex(COLUNA_ID);
int indexMarca = cursor.getColumnIndex(COLUNA_MARCA);
int indexModelo = cursor.getColumnIndex(COLUNA_MODELO);
int indexPlaca = cursor.getColumnIndex(COLUNA_PLACA);
int id = cursor.getInt(indexID);
String marca = cursor.getString(indexMarca);
String modelo = cursor.getString(indexModelo);
String placa = cursor.getString(indexPlaca);
Veiculo veiculo = new Veiculo(id, marca, modelo, placa);
veiculos.add(veiculo);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
return veiculos;
}
Programação Orientada a Objetos
Prof. Charles Fortes
Listas
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Listas
Pitágoras
List<Heroi> avengers = repositorio.Listar();
List<String> valoresDaLista = new ArrayList<String>();
for(int i = 0; i < avengers.size(); i++) {
valoresDaLista.add("Nome: " + avengers.get(i).nome
+ " Poder: " + avengers.get(i).poder);
}
ArrayAdapter<String> adapter
= new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_list_item_1,
android.R.id.text1,
valoresDaLista
);
listView.setAdapter(adapter);
Programação Orientada a Objetos
Prof. Charles Fortes
Notificações
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Notifications
private static void showNotification(String title, String message) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context.getApplicationContext())
.setSmallIcon(drawable)
.setPriority(Notification.PRIORITY_HIGH)
.setContentTitle(title)
.setContentText(message)
.setWhen(0)
.setTicker(context.getString(R.string.app_name));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
notificationBuilder.setContentText(message);
notificationBuilder.setContentIntent(pendingIntent );
Notification notification = notificationBuilder.build();
manager.notify(notificationId, notification);
}
Pitágoras
Programação Orientada a Objetos
Prof. Charles Fortes
Dúvidas?
Pitágoras

Pdm -final

  • 1.
    Programação Para DispositivosMoveis Prof. Charles Fortes PDM Pitágoras
  • 2.
    Programação Orientada aObjetos Prof. Charles Fortes Charles Fortes Pitágoras
  • 3.
    Programação Orientada aObjetos Prof. Charles Fortes Charles Fortes Líder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors Pitágoras
  • 4.
    Programação Orientada aObjetos Prof. Charles Fortes Charles Fortes Líder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors SlideShare: http://pt.slideshare.net/charleswellingtonfortes Linkedin: http://br.linkedin.com/in/charlesfortes/ Twitter: @CharlesFortes Pitágoras
  • 5.
    Programação Orientada aObjetos Prof. Charles Fortes Charles Fortes Líder Técnico na Empresa Prime Systems. Agilista, apaixonado por desenvolvimento (Web, Desktop, Mobile, o que for), pai, amante do Paintball e do Kenjutsu. MTAC - Microsoft Technical Audience Contributor 100Loop - DotNetRaptors Desenvolvimento Web – MVC – Angular.JS – JQuery – SQLServer – MySQL – HTML5 – NoSQL Pitágoras
  • 6.
    Programação Orientada aObjetos Prof. Charles Fortes Android Manifest Pitágoras
  • 7.
    Programação Orientada aObjetos Prof. Charles Fortes Manifest tem a função de ser o principal arquivo de configuração do seu aplicativo - Icone - Nome - Telas - Permissões - Dominio Pitágoras
  • 8.
    Programação Orientada aObjetos Prof. Charles Fortes Layout Pitágoras
  • 9.
    Programação Orientada aObjetos Prof. Charles Fortes Layout A arquitetura de interface gráfica do Android é baseada no padrão de projetos MVC (Model – View – Controller). Onde a camada Model, é responsável pelas regras de negócio da aplicação. A Camada de View, é responsável pela interface gráfica. E a camada de Controller gerencia os eventos de uma determinada tela. A grande vantagem proporcionada por este padrão é a modularidade. Ou seja, conseguimos alterar todo um layout de uma determinada tela sem mexer no código que diz respeito ao comportamento da mesma. Pitágoras
  • 10.
    Programação Orientada aObjetos Prof. Charles Fortes Layout Imaginando uma tela de login, a cor da tela, o tamanho e a fonte dos botões, tudo que diz respeito a interface gráfica é definido na camada View. Já o que irá acontecer quando os botões forem clicados será ministrado pela camada de Controller. No Android, os layouts XML assumem o papel de View. As Activitys assumem o papel de Controller. E a classe R, faz a ligação entre as duas camadas, permitindo o acesso de recursos encontrados na pasta Res nas Activitys do projeto. Pitágoras
  • 11.
    Programação Orientada aObjetos Prof. Charles Fortes Layout Nota: Você pode criar componentes gráficos diretamente na Activity, sem a necessidade da criação de um layout.xml. No entanto a modularidade citada acima seria perdida. Pitágoras
  • 12.
    Programação Orientada aObjetos Prof. Charles Fortes Layout LinearLayout: Este ViewGroup é um dos mais populares. Irá organizar os componentes com base na sua característica orientation. A tag orientation pode receber vertical ou horizontal. Caso o orientation estiver configurado como vertical, os componentes serão exibidos um em cima do outro. Caso esteja horizontal, os componentes serão exibidos um ao lado do outro. TableLayout: Esse layout organiza os componentes no formato de tabelas. Colunas e linhas. RelativeLayout: Esse layout organiza os componentes de um modo mais livre. A definição de onde o componente vai ficar, será definida no própria View. Pitágoras
  • 13.
    Programação Orientada aObjetos Prof. Charles Fortes Activities Pitágoras
  • 14.
    Programação Orientada aObjetos Prof. Charles Fortes Activity A parte comportamental, como ações de um botão ficam a cargo do Controller no caso do Android representado pela classe Activity. Sobrescrevemos o método onCreate da Activity, é nele que vincularemos o layout xml que criamos anteriormente. Pitágoras
  • 15.
    Programação Orientada aObjetos Prof. Charles Fortes Activity Pitágoras 1 2 3 4 5 6 7 8 9 public class ExemploActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.exemplo_layout); } }
  • 16.
    Programação Orientada aObjetos Prof. Charles Fortes Activity Toda Activity é criada, fica em contato com o usuário, em algum momento pode ser interrompida (como em um telefonema), em seguida pode ser restaurada ou destruída. Este é o ciclo de vida de uma Activity, e cada etapa descrita acima é marcada por um método. Assim que uma Activity é criada, o método onCreate(Bunde instanceSaved) é acionado. É neste momento que o desenvolvedor deve criar a interface gráfica que irá ficar em contato com o usuário. Daí a necessidade de chamar o método setContentView neste ponto, pois é ele que faz o vinculo do Layout.xml com a Activity. Quando uma Activity é totalmente destruída o método onDestroy() é acionado. Este é o momento ideal para a liberação dos recursos que estavam sendo consumidos pela Activity. Por exemplo: Caso esta Activity esteja exibindo um vídeo via streaming por exemplo, este é o momento de cancelar a conexão e liberar o consumo de memória realizada pelo visualizador de vídeo. Pitágoras
  • 17.
    Programação Orientada aObjetos Prof. Charles Fortes Classe R Pitágoras
  • 18.
    Programação Orientada aObjetos Prof. Charles Fortes R Responsável pelo acesso aos resources do projeto, sejam eles imagens, strings, ids, etc. Pitágoras
  • 19.
    Programação Orientada aObjetos Prof. Charles Fortes Intents Pitágoras http://developer.android.com/intl/pt-br/guide/components/intents-filters.html
  • 20.
    Programação Orientada aObjetos Prof. Charles Fortes Intents Intents são declarações de intenções para o sistema do dispositivo, que pode ser usada dentre outras coisas, desde uma simples troca de tela, acesso a um componente do dispositivo ou a outros aplicativos. Pitágoras
  • 21.
    Programação Orientada aObjetos Prof. Charles Fortes Intents Intent intent = new Intent(this, OutraAtividade.class); startActivity(intent); ------------------------------------ Uri uri = Uri.fromFile(new File("/sdcard/minhaaplicacao/hello_camera.jpg")); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivity(intent); Pitágoras
  • 22.
    Programação Orientada aObjetos Prof. Charles Fortes URI https://pt.wikipedia.org/wiki/URI A URI (um objeto Uri) que referencia os dados a serem aproveitados e/ou o tipo MIME desses dados. O tipo dos dados fornecidos geralmente é determinado pela ação da intenção. Ao criar uma intenção, em geral, é importante especificar o tipo de dados (seu tipo MIME) em adição à URI. Pitágoras
  • 23.
    Programação Orientada aObjetos Prof. Charles Fortes URI https://pt.wikipedia.org/wiki/URI A sintaxe URI é essencialmente um nome de conjunto URI como "HTTP", "FTP", "mailto", "URN", "tel", "rtsp", "file" etc, seguido de um caractere dois pontos e, por fim, a parte específica do conjunto. Exemplos de URIs Absolutas[editar | editar código-fonte] • http://example.org/absolute/URI/with/absolute/path/to/resource.txt • ftp://example.org/resource.txt • file:////home/example/example.org/resource.txt • urn:issn:1535-3613 Pitágoras
  • 24.
    Programação Orientada aObjetos Prof. Charles Fortes Extras - Bundles Pares de valores-chave que carregam informações adicionais exigidas para realizar a ação solicitada. Assim, como algumas ações usam determinados tipos de URIs de dados, outras também usam determinados extras. É possível adicionar dados extras com diversos métodos putExtra(), cada um aceitando dois parâmetros: o nome principal e o valor. Também é possível criar um objeto Bundle com todos os dados extras e, em seguida, inserir o Bundle na Intent com putExtras(). Pitágoras
  • 25.
    Programação Orientada aObjetos Prof. Charles Fortes Extras - Bundles Por exemplo: ao criar uma intenção para enviar um e-mail com ACTION_SEND, é possível especificar o recipiente "para" com a chave EXTRA_EMAIL e especificar o "assunto" com a chave EXTRA_SUBJECT. A classe Intent especifica diversas constantes EXTRA_* para tipos de dados padronizados. Se for necessário declarar chaves extras (para intenções que seu aplicativo receba), certifique-se de incluir o nome do pacote do aplicativo como prefixo. Por exemplo: Pitágoras
  • 26.
    Programação Orientada aObjetos Prof. Charles Fortes Conexão com o Banco Pitágoras https://developer.android.com/training/basics/data-storage/databases.html#DeleteDbRow
  • 27.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Um dos princípios mais importantes de bancos de dados do SQL é o esquema: uma declaração formal de como o banco de dados é organizado. O esquema é refletido nas declarações SQL usadas na criação do banco de dados Pitágoras
  • 28.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Um conjunto de APIs está disponível na classe SQLiteOpenHelper. Ao usar esta classe para obter referências para seu banco de dados, o sistema realiza operações de possível longa execução para criar e atualizar o banco de dados apenas quando necessário e não durante a inicialização do aplicativo. Basta chamar getWritableDatabase() ou getReadableDatabase(). Pitágoras
  • 29.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Pitágoras public HeroRepository(Context context){ ConexaoHelper cn = new ConexaoHelper(context); db = cn.getWritableDatabase(); }
  • 30.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Para usar SQLiteOpenHelper, crie uma subclasse que substitua os métodos de retorno de chamada onCreate(), onUpgrade() e onOpen(). Também é possível implementar onDowngrade(), mas não é obrigatório. Pitágoras
  • 31.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Pitágoras import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by charles.fortes on 11/05/2016. */ public class ConexaoHelper extends SQLiteOpenHelper { public ConexaoHelper(Context context) { super(context, "DBMarvel", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("Create table herois (nome text, poder text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table herois"); onCreate(db); } }
  • 32.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite execSQL executa um comando que não retorna resultado rawQuery recupera um cursor com os dados Métodos da Canexão para Facilitar a Vida: Insert Update Delete Query db.insert("herois",null, valores); dataBase.delete(NOME_TABELA, COLUNA_ID + " = ?", valoresParaSubstituir); dataBase.update(NOME_TABELA, valores, COLUNA_ID + " = ?", valoresParaSubstituir); Pitágoras
  • 33.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Cursor: Utilizado para percorrer os resultados da consulta e recuperar os itens ContentValues: Lista de Chaves e Valores para Passagem de Parâmetros Pitágoras ContentValues values = new ContentValues(); values.put(COLUNA_MARCA, veiculo.getMarca()); values.put(COLUNA_MODELO, veiculo.getModelo()); values.put(COLUNA_PLACA, veiculo.getPlaca());
  • 34.
    Programação Orientada aObjetos Prof. Charles Fortes SQLite Pitágoras private List<Veiculo> construirVeiculoPorCursor(Cursor cursor) { List<Veiculo> veiculos = new ArrayList<Veiculo>(); if(cursor == null) return veiculos; try { if (cursor.moveToFirst()) { do { int indexID = cursor.getColumnIndex(COLUNA_ID); int indexMarca = cursor.getColumnIndex(COLUNA_MARCA); int indexModelo = cursor.getColumnIndex(COLUNA_MODELO); int indexPlaca = cursor.getColumnIndex(COLUNA_PLACA); int id = cursor.getInt(indexID); String marca = cursor.getString(indexMarca); String modelo = cursor.getString(indexModelo); String placa = cursor.getString(indexPlaca); Veiculo veiculo = new Veiculo(id, marca, modelo, placa); veiculos.add(veiculo); } while (cursor.moveToNext()); } } finally { cursor.close(); } return veiculos; }
  • 35.
    Programação Orientada aObjetos Prof. Charles Fortes Listas Pitágoras
  • 36.
    Programação Orientada aObjetos Prof. Charles Fortes Listas Pitágoras List<Heroi> avengers = repositorio.Listar(); List<String> valoresDaLista = new ArrayList<String>(); for(int i = 0; i < avengers.size(); i++) { valoresDaLista.add("Nome: " + avengers.get(i).nome + " Poder: " + avengers.get(i).poder); } ArrayAdapter<String> adapter = new ArrayAdapter<String>( getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, valoresDaLista ); listView.setAdapter(adapter);
  • 37.
    Programação Orientada aObjetos Prof. Charles Fortes Notificações Pitágoras
  • 38.
    Programação Orientada aObjetos Prof. Charles Fortes Notifications private static void showNotification(String title, String message) { NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context.getApplicationContext()) .setSmallIcon(drawable) .setPriority(Notification.PRIORITY_HIGH) .setContentTitle(title) .setContentText(message) .setWhen(0) .setTicker(context.getString(R.string.app_name)); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); notificationBuilder.setContentText(message); notificationBuilder.setContentIntent(pendingIntent ); Notification notification = notificationBuilder.build(); manager.notify(notificationId, notification); } Pitágoras
  • 39.
    Programação Orientada aObjetos Prof. Charles Fortes Dúvidas? Pitágoras