2
respostas

Somente alterar o colocaAlunoNoFormulario não é suficiente para mostrar a foto tirada.

Somente alterar o colocaAlunoNoFormulario não é suficiente para mostrar a foto tirada ou alterada. É preciso alterar também o pegaAlunodoBanco(é uma possibilidade via getTag(),visto em curso 2 com Android Studio), setando o caminhodafoto com a informação do mesmo que foi criada no FormularioActivity que foi enviado para o Intent da Camera via putExtra com Uri localFoto, depois que entra no OK do onActivityResult é chamado o helper.carregaImagem(caminhodafoto). Essec caminho foto entra no escopo de um objeto Helper via chamada de função carregaimagem. Assim dentro dessa função temos que realizar

aluno.setCaminhoFoto(caminhoFoto);

Solução que foi sugerida para o exercício, mas que não é suficiente, apesar de ser sugerida como suficiente.

public void colocaAlunoNoFormulario(Aluno aluno) {
    editNome.setText(aluno.getNome());

    this.aluno = aluno;

    if (aluno.getFoto() != null) {
        this.carregaImagem(aluno.getFoto());
    }
}

Eu fiz o curso 2 pelo Android Studio e lá a solução foi um pouco mais complexa, lá se usa um em carregaimagem

campoFoto.setTag(caminhoFoto);

E depois no buscaAlunosNoBanco

aluno.setCaminhoFoto((String)getCampoFoto().getTag());

Sinceramente, é quando as coisas não funcionam é que realmente podemos aprender mais ainda. Pelo curso 2 Android Strudio, foi simplesmente ctrl+c e ctrl+v sem nenhuma reflexão de minha parte, apenas atentando para a observação sobre o problema feito pelo instrutor. Porém não tentei nenhuma solução alternativa ao campoFoto.setTag() e getTag().

Agora refazendo pelo curso 2 ADT me forcei a descobrir que bastava um aluno.setCaminhoFoto(caminhoFoto);

2 respostas

Fala ai Romullo, tudo bem ?

Como podemos melhorar essa parte ?

Me desculpa Professor, Só agora eu vi sua pergunta. É que somente alterar colocando getFoto e chamando CarregaImagem não funciona, pois nesse estágio o Objeto aluno não teve o campo caminhoFoto alterado de um objeto null.

Nesse estágio o aluno.getFoto() é igual a null e o this.carregaImagem() não é chamado.

if (aluno.getFoto() != null) {
        this.carregaImagem(aluno.getFoto());
 }

A solução no curso com Android Studio tá completa. Essa acima é sugerida no curso com Eclipse. Então para consertar eu fiz o setCaminhoFoto() dentro da função carregaImagem() que é aprimeria que recebe o caminhoFoto. Originalmente dentro dela não tinha o setCaminhoFoto e nesse ponto que eu inseri o aluno.setCaminhoFoto();

Então é nesse momento que caminhoFoto é propagado para o helper que tem um objeto Aluno. Sendo no carregaImagem que devemos aproveitar e realizar o setCaminhoFoto.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode==CODICO_CAMERA){

            if(resultCode==Activity.RESULT_OK){
                helper.carregaImagem(this.caminhoFoto);

            }else{
                this.caminhoFoto=null;
            }

        }

    }

Ficando o carregaImage() assim:

public void carregaImagem(String caminhoFoto) {
        if(caminhoFoto!=null){
            Bitmap imagemFoto = BitmapFactory.decodeFile(caminhoFoto);

            Bitmap imagemFotoReduzida = Bitmap.createScaledBitmap(imagemFoto,
                    100, 100, true);
            campoFoto.setImageBitmap(imagemFotoReduzida);
            //campoFoto.setTag(caminhoFoto);
            aluno.setCaminhoFoto(caminhoFoto);
        }