0% acharam este documento útil (0 voto)
125 visualizações12 páginas

Armazenando Imagens em SQLite e Realm

O documento explica como armazenar imagens em um banco de dados SQLite e no Realm usando o tipo BLOB. As imagens precisam ser convertidas em arrays de bytes antes de serem armazenadas e recuperadas como Bitmaps. O documento também mostra como tirar fotos, salvá-las no banco e recuperá-las para exibição.

Enviado por

Maxwell Ferreira
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
125 visualizações12 páginas

Armazenando Imagens em SQLite e Realm

O documento explica como armazenar imagens em um banco de dados SQLite e no Realm usando o tipo BLOB. As imagens precisam ser convertidas em arrays de bytes antes de serem armazenadas e recuperadas como Bitmaps. O documento também mostra como tirar fotos, salvá-las no banco e recuperá-las para exibição.

Enviado por

Maxwell Ferreira
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

PROGRAMAÇÃO

ANDROID
Salvando imagens no banco

Universidade Federal de Sergipe


Departamento de Sistemas de Informação
Prof. Andrés Menéndez
ammenendez@[Link]
Guardando as imagens no SQLite
• Para armazenar as imagens em um banco de dados
SQLite temos que usar um tipo de dados chamado BLOB
• O tipo BLOB é um array de bytes e, portanto, algumas
transformações são necessárias
• Suponha que nossa tabela é da seguinte forma

CREATE TABLE Contatos (


id INTEGER PRIMARY KEY AUTOINCREMENT,
nome CHAR (20),
foto BLOB
);
Guardando as imagens no SQLite
• A classe que vai representar a tabela poderia ser assim

public class Contato {


private int id;
private String nome;
private byte[] foto;

public Contato(int id, String nome, byte[] foto) {


[Link] = id;
[Link] = nome;
[Link] = foto;
}

// métodos get e set

}
Guardando as imagens no SQLite
• Na inserção do elemento temos que transformar o BitMap
num byte[ ] (array de bytes)
• Fazemos com o seguinte código

ByteArrayOutputStream stream = new ByteArrayOutputStream();


[Link]([Link], 100, stream);
byte imagemBytes[] = [Link]();

• Onde imageBitmap é a imagem que quer ser enviada no


formato BitMap
Guardando as imagens no SQLite
• Imaginando que fizemos uma consulta ao banco de
dados, a transformação para mostrar a imagem pode ser
vista abaixo

// consulta ao banco de dados


DataBaseHandler bd = new DataBaseHandler(this);
Contato contato = [Link](id);

byte[] outImage=[Link]();
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap imageBitmap = [Link](imageStream);
[Link](imageBitmap);
Armazenando com Realm
• Neste caso depois de fazer a configuração da aplicação
para usar o Realm vamos fazer ter que usar também um
array de bytes para representar a foto
Armazenando com Realm
• O app vai ter o seguinte
formato
• Ele vai permitir que sejam
tiradas e armazenadas fotos
além de fazer a pesquisa pelo
nome do contato
Armazenando com Realm
• A classe que vai ser persistida pode ser vista abaixo
public class Contato extends RealmObject {
private String nome;
private byte[] foto;

public String getNome() {


return nome;
}

public void setNome(String nome) {


[Link] = nome;
}

public byte[] getFoto() {


return foto;
}

public void setFoto(byte[] foto) {


[Link] = foto;
}
}
Armazenando com Realm
• Vejamos a programação do botão Tirar Foto

imagem = (ImageView) findViewById([Link]);


Button foto = (Button) findViewById([Link]);
[Link](new [Link]() {
@Override
public void onClick(View v) {
Intent takePictureIntent = new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if ([Link](getPackageManager()) != null) {
startActivityForResult(takePictureIntent, TIRAR_FOTO);
}
}
});
Armazenando com Realm
• O retorno da chamada da câmera pode ser visto no
método abaixo

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
[Link](requestCode, resultCode, data);
if (requestCode == TIRAR_FOTO && resultCode == RESULT_OK) {
Bundle extras = [Link]();
imageBitmap = (Bitmap) [Link]("data");
[Link](imageBitmap);
}
}

• Tanto imageBitmap (Bitmap) quanto imagem (ImageView)


são atributos da classe
Armazenando com Realm
• Vejamos como fica a programação do botão salvar
@Override
public void onClick(View v) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
[Link]([Link], 100, stream);
byte imagemBytes[] = [Link]();

Realm realm = [Link]();


[Link]();
Contato contato = new Contato();
[Link]([Link]().toString());
[Link](imagemBytes);
[Link](contato);
[Link]();
[Link]();
[Link](getApplicationContext(), "Foto armazenada com sucesso",
Toast.LENGTH_LONG).show();
}
Armazenando com Realm
• Vejamos agora como fazer a consulta pelo nome do
contato
public void onClick(View v) {
Realm realm = [Link]();

Contato contato = [Link]([Link]).equalTo("nome",


[Link]().toString()).findFirst();
if (contato != null) {
byte[] outImage=[Link]();
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap imageBitmap = [Link](imageStream);
[Link](imageBitmap);
}
[Link]();
}

Você também pode gostar