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

Não tô conseguindo adicionar Aluno sem foto na agenda.

Toda vez que eu adiciono aluno sem foto da um crash, gostaria de saber onde está o problema no código. Muito obrigado!

FormularioActivity:

public class FormularioActivity extends AppCompatActivity {

    public static final int CODIGO_CAMERA = 567;
    private FormularioHelper helper ;
    private String CaminhoFoto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); setContentView(R.layout.activity_formulario);

        helper = new FormularioHelper(this);

        Intent intent = getIntent();
        Aluno aluno = (Aluno)  intent.getSerializableExtra("aluno");
        if (aluno != null) {
            helper.preencheFormulario(aluno);
        }

        Button botaoFoto = (Button) findViewById(R.id.button_camera);
        botaoFoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                CaminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                File ArquivoFoto = new File(CaminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(ArquivoFoto));
                startActivityForResult(intentCamera, CODIGO_CAMERA);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == CODIGO_CAMERA && resultCode == RESULT_OK){
            helper.carregaImagem(CaminhoFoto);
            //abrir foto
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.getAluno();
                AlunoDAO dao = new AlunoDAO(this);

                if(aluno.getId() != null){
                    dao.altera(aluno);
                } else {
                    dao.insereAluno(aluno);
                }
                dao.close();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

Adapter:


public View getView(int position, View convertView, ViewGroup parent) {


    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(ctx);
    Aluno aluno = alunos.get(position);

     View view = convertView;
        if(view == null){
            view = inflater.inflate(R.layout.list_item, parent, false);
        }
        TextView campoNome = (TextView) view.findViewById(R.id.item_nome);
        campoNome.setText(aluno.getNome());

        TextView campoTelefone = (TextView) view.findViewById(R.id.item_telefone);
        campoTelefone.setText(aluno.getTelefone());

        ImageView campoFoto = (ImageView) view.findViewById(R.id.item_foto);
        String CaminhoDaFoto = aluno.getCaminhoFoto();
        if(CaminhoDaFoto != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(CaminhoDaFoto);
            Bitmap BitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true); //true -> filter
            campoFoto.setImageBitmap(BitmapReduzido);
            campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
        }
        return view;
    }


FormularioHelper:

public class FormularioHelper {

    private final EditText campoNome;
    private final EditText campoEndereco;
    private final EditText campotelefone;
    private final EditText campoSite;
    private final RatingBar campoNota;
    private final ImageView campoFoto;
    private Aluno aluno;

    public FormularioHelper(FormularioActivity activity){
        campoNome = (EditText) activity.findViewById(R.id.form_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.form_endereco);
        campotelefone = (EditText) activity.findViewById(R.id.form_telefone);
        campoSite = (EditText) activity.findViewById(R.id.form_site);
        campoNota = (RatingBar) activity.findViewById(R.id.form_nota);
        campoFoto = (ImageView) activity.findViewById(R.id.form_foto);
        this.aluno = new Aluno();

    }

    public Aluno getAluno() {
        Aluno aluno = new Aluno();
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campotelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota(Double.valueOf((campoNota.getProgress())));
        aluno.setCaminhoFoto(campoFoto.getTag().toString());
        aluno.setId(this.aluno.getId());
        return aluno;
    }

    public void preencheFormulario(Aluno aluno) {
        campoNome.setText(aluno.getNome());
        campoEndereco.setText(aluno.getEndereco());
        campotelefone.setText(aluno.getTelefone());
        campoSite.setText(aluno.getSite());
        campoNota.setProgress(aluno.getNota().intValue());
        carregaImagem(aluno.getCaminhoFoto());
        this.aluno = aluno;

    }

    public void carregaImagem(String CaminhoDaFoto) {
        if(CaminhoDaFoto != null){
            Bitmap bitmap = BitmapFactory.decodeFile(CaminhoDaFoto);
            Bitmap BitmapReduzido = Bitmap.createScaledBitmap(bitmap, 300, 300, true); //true -> filter
            campoFoto.setImageBitmap(BitmapReduzido);
            campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
            campoFoto.setTag(CaminhoDaFoto);
        }
    }
}
2 respostas
solução!

Mostra a stacktrace do erro, pra gente dar uma olhada.

Felipe, já consegui solucionar o problema. Muito obrigado!!