Gostaria de saber como eu faria para inserir foto do aluno. Teriam algum exemplo de código? Que tipo eu devo usar? Vou precisar de algum tipo de ConversorImage, assim como usamos o ConversorCalendar?
Gostaria de saber como eu faria para inserir foto do aluno. Teriam algum exemplo de código? Que tipo eu devo usar? Vou precisar de algum tipo de ConversorImage, assim como usamos o ConversorCalendar?
Quando se armazena uma imagem (ou qualquer outro tipo de arquivo) no banco de dados, ele deve ter um campo específico para isso, e deve ser do tipo BLOB (Binary Large Object), tipo que é responsável por armazenar arquivos, como imagens, áudios e qualquer outro tipo de objeto multimídia. Os dados são armazenados em bytes.
Para armazenar uma imagem no banco de dados, primeiro devemos converte-la em bytes para então armazenar no campo BLOB do banco de dados. Após recuperá-la de seu dispositivo ou utilizar a câmera para tirar a foto na hora, essa imagem deve ser tratada e armazenada em um objeto do tipo Bitmap e, em seguida, a imagem deve ser compactada utilizando algum padrão como JPG ou PNG.
Após sua compactação devemos extrair seus bytes e armazená-los em um array de bytes, que será passado para a classe responsável por adicionar os dados no banco.
//Código….
Bitmap bitmap = ((BitmapDrawable)foto.getDrawable()).getBitmap();
ByteArrayOutputStream saida = new ByteArrayOutputStream();
//Compactação em PNG
bitmap.compress(Bitmap.CompressFormat.PNG,100,saida);
byte[] img = saida.toByteArray();
//Mais código..
É muito importante se atentar no cast para BitmapDrawable, pois o getDrawable será acionado do objeto foto, que é uma instância da classe ImageView. O método compress recebe três parâmetros: o primeiro é o tipo que se quer compactar a imagem, o segundo é a qualidade dela e, o terceiro é o objeto da classe ByteArrayOutputStream, que é responsável por armazenar a imagem compactada. Por último ocorre a extração, onde tem-se um array de bytes que recebe o ByteArrayOutputStream convertido para o formato necessário.
O atributo da sua entidade vai ser representado como um array de byte: private byte[] foto.
Simplificando para recuperar a imagem:
Bitmap raw;
byte[] fotoArray = ENTIDADE.getFoto();
ImageView foto = VIEW_EM_QUESTAO.findViewById(R.id.imageView);
if(fotoArray!=null) {
raw = BitmapFactory.decodeByteArray(fotoArray,0,fotoArray.length);
foto.setImageBitmap(raw);
}
Muito obrigado! Principalmente pela explicação de cada linha de código! Vou tentar implementar em breve!