5
respostas

App Agenda parou após alterações para persistir fotos no banco

Boa noite após fazer as alterações da aula minha aplicação não abre mais. Seguem as classes alteradas. Desde já agradeço muito!

package br.com.alura.agenda.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.NonNull;
import android.widget.Switch;

import java.util.ArrayList;
import java.util.List;

import br.com.alura.agenda.modelo.Aluno;

/**
 * Created by caioccatin on 06/06/2017.
 */

public class DAOAlunos extends SQLiteOpenHelper {
    public DAOAlunos(Context context) {
        super(context, "Agenda", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, " +
               "site TEXT, nota REAL, CampoFoto TEXT);";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "";
        switch (oldVersion){
            case 1:
                sql = "ALTER TABLE Alunos add colunm CampoFoto TEXT;";
                db.execSQL(sql);
        }

        }


    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAlunos(aluno);

        db.insert("Alunos", null, dados);

    }

    @NonNull
    private ContentValues pegaDadosAlunos(Aluno aluno) {
        ContentValues dados = new ContentValues();
        dados.put("nome",aluno.getNome());
        dados.put("endereco", aluno.getEndereco());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());
        dados.put("CampoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    public List<Aluno> buscaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        String sql = "SELECT * FROM Alunos";
        Cursor c = db.rawQuery(sql, null);
        List<Aluno> listaalunos = new ArrayList<Aluno>();

        while  (c.moveToNext()){
        Aluno aluno = new Aluno();
          aluno.setId(c.getInt(c.getColumnIndex("id")));
          aluno.setNome(c.getString(c.getColumnIndex("nome")));
          aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
          aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
          aluno.setSite(c.getString(c.getColumnIndex("site")));
          aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
          aluno.setCaminhoFoto(c.getString(c.getColumnIndex("CampoFoto")));
          listaalunos.add(aluno);
      }
        c.close();

    return listaalunos;
    }

    public void Deleta(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        String [] params = {String.valueOf(aluno.getId())};
        db.delete("Alunos","id = ?", params);

    }

    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosAlunos(aluno);
        String[] params = {String.valueOf(aluno.getId())};
        db.update("Alunos", dados, "id = ?", params);
    }
}

package br.com.alura.agenda;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import br.com.alura.agenda.modelo.Aluno;

/**
 * Created by caioccatin on 05/06/2017.
 */

public class FormularioHelper {

    private final EditText nome;
    private final EditText endereco;
    private final EditText telefone;
    private final TextView site;
    private final RatingBar nota;
    private  Aluno aluno;
    private  ImageView campoFoto ;

    public FormularioHelper(FormularioActivity activity) {
        nome =  (EditText) activity.findViewById(R.id.formulario_nome);
        endereco =  (EditText) activity.findViewById(R.id.formulario_endereco);
        telefone =  (EditText) activity.findViewById(R.id.formulario_telefone);
        site =  (EditText) activity.findViewById(R.id.formulario_site);
        nota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        campoFoto = (ImageView) activity.findViewById(R.id.formulario_imagem);
        aluno = new Aluno();

    }

    public Aluno pegaAluno(){
        aluno.setNome(nome.getText().toString());
        aluno.setEndereco(endereco.getText().toString());
        aluno.setTelefone(telefone.getText().toString());
        aluno.setSite(site.getText().toString());
        aluno.setNota(nota.getNumStars());
        aluno.setCaminhoFoto((String) campoFoto.getTag());
        return aluno;
    }

    public void preencheFormulario(Aluno aluno) {
        nome.setText(aluno.getNome());
        endereco.setText(aluno.getEndereco());
        telefone.setText(aluno.getTelefone());
        site.setText(aluno.getSite());
        nota.setProgress((int) aluno.getNota());
        carregaFoto(aluno.getCaminhoFoto());

        this.aluno = aluno;
    }


    public void carregaFoto(String caminhoFoto) {
        Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
        Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 300, 300, true);
        campoFoto.setImageBitmap(bitmapReduzido);
        campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
        campoFoto.setTag(caminhoFoto);
    }
}

package br.com.alura.agenda;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;

import br.com.alura.agenda.dao.DAOAlunos;
import br.com.alura.agenda.modelo.Aluno;

public class FormularioActivity extends AppCompatActivity {
    public static final int CODIGO_CAMERA = 586;
    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 btnCamera = (Button) findViewById(R.id.formulario_btncamera);
        btnCamera.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) {
        if (resultCode == Activity.RESULT_OK){
            if (requestCode == CODIGO_CAMERA){
                //ImageView foto = (ImageView) findViewById(R.id.formulario_imagem);
               helper.carregaFoto(caminhoFoto);
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().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.pegaAluno();
                DAOAlunos dao = new DAOAlunos(this);
                if (aluno.getId() == 0)  {

                    dao.insere(aluno);
                } else {
                    dao.altera(aluno);

                }

                dao.close();
                Toast.makeText(FormularioActivity.this, "Salvando Aluno:" + aluno.getNome() + "!" , Toast.LENGTH_LONG).show();

                finish();
                break;
        }


        return super.onOptionsItemSelected(item);
    }
}

package br.com.alura.agenda.modelo;

import java.io.Serializable;

/**
 * Created by caioccatin on 05/06/2017.
 */

public class Aluno implements Serializable{
    private int id = 0;
    private String nome;
    private String telefone;
    private String endereco;
    private String site;
    private double nota;
    private String caminhoFoto;

    public String getSite() {
        return site;
    }

    public void setSite(String site) {
        this.site = site;
    }

    public Integer getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public double getNota() {
        return nota;
    }

    public void setNota(double nota) {
        this.nota = nota;
    }

    @Override
    public String toString() {
        return this.getId() + " | " + this.getNome();
    }


    public String getCaminhoFoto() {
        return caminhoFoto;
    }

    public void setCaminhoFoto(String caminhoFoto) {
        this.caminhoFoto = caminhoFoto;
    }
}
5 respostas

Caio, tudo bem ?

Você esqueceu de subir a versão do banco de dados.

Por esse motivo ao você tentar persistir num campo que não existe, ocorre o erro.

Oi bom dia Matheus, muito obrigado pela atenção. Infelizmente mesmo alterando a versão do DB o app ainda está quebrando logo ao abrir

Qual é o erro que está dando ?

Após compilar, ou simplesmente ao tentar abrir o app, ela dá a mensagem de "O Aplicativo 'agenda' parou.".

Obrigado de novo.

Ele exibe um erro no logcat, dá uma olhadinha e passa para gente, ai teremos uma noção do que tá rolando.