[Android] Problemas para gravar o endereço da foto tirada com a câmera no banco de dados

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();				
		
	}

Para se chamar o getContentResolver() é necessário um contexto.

Será que é isso???

Se puder, posta o erro que da no LogCat…

Abraço.

Oi Felipe, obrigada por responder,

Olha o que está acontecendo:

  • Eu clico no ImageButton;
  • Escolho tirar uma foto, o que chama a classe interna “TirarFoto”, que por sua vez chama a câmera nativa do Android;
  • Eu clico no botão redondo da câmera e a foto é tirada, depois clico no botão de ok que aparece no lugar do botão redondo (estou testando no 2.3.1);
  • Ao clicar nos botões, eu tô conseguindo gravar a foto tanto na gallery, quanto no bd e também estou conseguindo inserir a foto no ImageButton. Quando fecho e reabro o app, a foto continua lá, sinal que o endereço da foto está gravado no bd;

Problema: apesar de tudo isso, aparece uma mensagem dizendo que o app parou inesperadamente e tb acontece uma NullPointerException que aponta para as linhas 55(o que é estranho, já que essa linha só era para ser chamada se escolhesse a imagem direto da gallery) e 65.

Ah, sim, aí vai o erro que aparece no logcat:

09-24 10:48:29.125: ERROR/AndroidRuntime(558): FATAL EXCEPTION: main
09-24 10:48:29.125: ERROR/AndroidRuntime(558): java.lang.RuntimeException: Unable to resume activity {contact.list/contact.list.DetalhesContato}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=inline-data (has extras) }} to activity {contact.list/contact.list.DetalhesContato}: java.lang.NullPointerException
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2095)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2110)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1643)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2796)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.access$1600(ActivityThread.java:117)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:932)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.os.Looper.loop(Looper.java:123)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.main(ActivityThread.java:3647)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at java.lang.reflect.Method.invokeNative(Native Method)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at java.lang.reflect.Method.invoke(Method.java:507)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at dalvik.system.NativeStart.main(Native Method)
09-24 10:48:29.125: ERROR/AndroidRuntime(558): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=inline-data (has extras) }} to activity {contact.list/contact.list.DetalhesContato}: java.lang.NullPointerException
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2496)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2082)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     ... 13 more
09-24 10:48:29.125: ERROR/AndroidRuntime(558): Caused by: java.lang.NullPointerException
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.content.ContentResolver.acquireProvider(ContentResolver.java:743)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.content.ContentResolver.query(ContentResolver.java:256)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at contact.list.DetalhesContato.gravarEstabelecerImagem(DetalhesContato.java:266)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at contact.list.DetalhesContato.onActivityResult(DetalhesContato.java:256)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.Activity.dispatchActivityResult(Activity.java:3907)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2492)
09-24 10:48:29.125: ERROR/AndroidRuntime(558):     ... 14 more