Oi gente,
abaixo coloquei o trecho de código em que, ao clicar num botão (um ImageButton), o usuário tira uma foto e,
em seguida, essa foto é gravada na Gallery(o que está dando certo), gravada no banco de dados e finalmente
exibida no ImageButton.
Mas a gravação no bd não está dando certo porque está dando NullPointerException nessa linha de código:
Se alguém mais experiente souber onde está o erro seria muito bom.
Agradeço desde já a ajuda =]
private class TirarFoto implements OnClickListener {
public void onClick(View v) {
mudarFoto.dismiss();
Intent it = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(it, 0);
}
}
private class PegarNaGaleria implements OnClickListener {
public void onClick(View v) {
mudarFoto.dismiss();
chamarGaleria();
}
}
private class CancelarBtn implements OnClickListener {
public void onClick(View v) {
mudarFoto.dismiss();
}
}
private void chamarGaleria() {
Intent it = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(it, 1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent it) {
super.onActivityResult(requestCode, resultCode, it);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK){
Bundle bundle = it.getExtras();
if(bundle != null) {
//Recupera o bitmap retornado pela câmera
Bitmap image = (Bitmap)bundle.get("data");
String timestamp = Long.toString(System.currentTimeMillis());
//Salva a imagem na galeria
String localDaImagem = MediaStore.Images.Media.insertImage(getContentResolver(), image, timestamp, timestamp);
Uri photographedImage = Uri.parse(localDaImagem);
gravarEstabelecerImagem(photographedImage);
}
}
case 1:
if(resultCode == RESULT_OK){
//Recupera a imagem escolhida pelo usuário na Gallery.
Uri selectedImage = it.getData();
gravarEstabelecerImagem(selectedImage);
}
}
}
private void gravarEstabelecerImagem(Uri uri) {
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap imagem = BitmapFactory.decodeFile(filePath);
int h = imagem.getHeight();
int w = imagem.getWidth();
Bitmap imagemPredimensionada = null;
if(w > h) {
int int1 = (w - h)/2;
imagemPredimensionada = Bitmap.createBitmap (imagem, int1, 0, h, h);
}
//Grava o endereço(filePath) da imagem do contato no banco de dados
acoesBancoDados = new LerGravarExcluirScript(DetalhesContato.this);
contatos = acoesBancoDados.listarContatos();
//Recupera o objeto Contato que foi clicado:
objContato = contatos.get(indice);
acoesBancoDados.salvarImagem(filePath, objContato);
//Dimensionamento da imagem escolhida de acordo com o layout
Drawable d = profilePictureButton.getDrawable();
int drawableAltura = d.getIntrinsicHeight ();
int drawableLargura = d.getIntrinsicWidth ();
Log.i("Contatos", "Altura drawable do ImageButton: " + drawableAltura + ", Largura drawable do ImageButton: " + drawableLargura);
Bitmap scaledImagem = null;
if(((drawableAltura == 270) || (drawableLargura == 270)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 270, 270, true);
}else if(((drawableAltura == 270) || (drawableLargura == 270)) && imagemPredimensionada != null){
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 270, 270, true);
}else if(((drawableAltura == 157) || (drawableLargura == 157)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 157, 157, true);
}else if(((drawableAltura == 157) || (drawableLargura == 157)) && imagemPredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 157, 157, true);
}else if(((drawableAltura == 120) || (drawableLargura == 120)) && imagemPredimensionada == null) {
scaledImagem = Bitmap.createScaledBitmap(imagem, 120, 120, true);
}else if(((drawableAltura == 120) || (drawableLargura == 120)) && imagemPredimensionada != null) {
scaledImagem = Bitmap.createScaledBitmap(imagemPredimensionada, 120, 120, true);
}
profilePictureButton.setImageBitmap(scaledImagem);
//Fecha o Banco de Dados
acoesBancoDados.fechar();
}