Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Preencher foto app Agenda

Estive com o mesmo problema desta pergunta - https://cursos.alura.com.br/forum/topico-fileuriexposedexception-utilizando-a-camera-28974

Consegui fazer todo o preocesso - pelo site developer android. Após tirar foto ela preenche o espaço no formulário sem problema. Porem na hora preencher o formulário com este método:

 carregarImagem(aluno.getCaminhoFoto());

Acontece este erro.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.amomi.agenda_alura/com.example.amomi.agenda_alura.FormularioActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference.

Ao preencher esta parte do código

Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);

Vocês deveria atualizar esta aula. Acabei de chegar no curso alura e estou com bastante dificuldade de prosseguir. O prefessor da uma resposta aqui - https://cursos.alura.com.br/forum/topico-fileuriexposedexception-utilizando-a-camera-28974

porém não ensina como corrigir.

Aguardando Solução.

6 respostas

De qualquer maneira agradeço pela atenção. Descobri o erro. Foi um erro no cursor da quando ele lê a coluna. Código estava registrado errado.

solução!

Vou deixar o código aqui pra quem quiser.

 Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                if (intentCamera.resolveActivity(getPackageManager()) != null) {
                    File fotoArquivo = null;

                    try {

                        fotoArquivo = criarImagem();
                    } catch (IOException ex) {
                        Toast.makeText(FormularioActivity.this, "Erro ao criar imagem.", Toast.LENGTH_SHORT).show();

                    }
                    if (fotoArquivo != null) {
                        Uri fotoUri = FileProvider.getUriForFile(FormularioActivity.this, "nome_do_seu_pacote.fileprovider", fotoArquivo);

                        // intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(fotoArquivo));
                        intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, fotoUri);
                        startActivityForResult(intentCamera, CODIGO_CAMERA);


                    }

                }

Método para carregar imagem

private File criarImagem() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );
        //caminhoFoto =getExternalFilesDir(Environment.DIRECTORY_PICTURES)+"/"+ imageFileName + ".jep";
        // Save a file: path for use with ACTION_VIEW intents
        caminhoFoto = image.getAbsolutePath();
        return image;
    }

Tem de escrever isto no Manifest

<application>
        ...
<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="nome_do_seu_pacote.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

...
    </application>

E tem de criar res/xml/file_paths.xml.

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/nome_do_seu_pacote/files/Pictures" />
</paths>

Também pedi permissões -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"
        android:required="true" />

Obrigado pelo seu feedback, Antonio! E muito obrigado por compartilhar sua solução aqui! Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software