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

Agenda Parou =(

Olá, minha aplicação rodava, antes do metodo BuscaAluno Ser criado, ele rodava e aparecia o Àluno (x) Salvo, mas depois desse metodo, toda vez que clico no menu OK minha agenda para, meu logcat fica a milhão kkk não sei ler direito as açoes ocorrida, mas minha referencia a class ficou assim :

Referencia&Método | AlunoDAO.buscaAlunos()

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

        List<Aluno> alunos = new ArrayList<Aluno>();
        while (c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(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")));

            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

Referencia&Método | FormularioHelper.getAluno()

  public Aluno getAluno() {

       Aluno aluno = new Aluno();

       aluno.setNome(CampoNome.getText().toString());
       aluno.setEndereco(CampoNome.getText().toString());
       aluno.setTelefone(CampoNome.getText().toString());
       aluno.setSite(CampoNome.getText().toString());
       aluno.setNota(Double.valueOf(CampoNota.getProgress()));

       return aluno;

    }

No Formulario

switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.getAluno();
                AlunoDAO dao = new AlunoDAO(this);
                dao.insere(aluno);
                dao.close();
.....

Na ListaDeAlunos

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

        ListView listaAlunos =(ListView) findViewById(R.id.lista_alunos);
        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);

.........

Espero que identifique o erro para mim =D, Não consegui arrumar de forma alguma =(

Qualquer coisa subo minha aplicação para o GitHub, para analise mais afundo do COD ;)

7 respostas

Olá Mateus,

Acho que vou precisar do código completo da classe AlunoDAO pra ter uma ideia de como o banco foi criado e se tem alguma coisa que possa estar gerando o erro.

Aproveitando, dá uma olhada no método getAluno() do FormularioHelper. Acho que rolou um copy & paste ali e ficou faltando substituir o `CampoNome' em quase todas as linhas :) (isso não resolve o problema é só pra evitar problemas futuros pois dessa forma o nome seria salvo em todos os campos do aluno)

Olá Jéferson, Subi o Código para o GitHub

Obrigado pela atenção =D

Opa, encontrei algo que pode estar gerando o erro. É só um pequeno erro de digitação mas que impossibilita a criação correta do banco de dados. Vamos ver o método onCreate() da classe AlunoDAO:

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

Perceba ali na instrução de CREATE TABLE que o id foi declarado com o tipo INTERGER mas deveria ser INTEGER. Tenta fazer essa pequena correção e testar pra ver se isso resolve.

Ainda esta parando a agenda =(

Agora conseguir capturar alguma coisa no logcat :

09-27 18:40:15.677 29481-29481/br.com.devjr.agenda E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.devjr.agenda, PID: 29481
    java.lang.NullPointerException: Attempt to invoke virtual method 'br.com.devjr.agenda.modelo.Aluno br.com.devjr.agenda.FormularioHelper.getAluno()' on a null object reference
        at br.com.devjr.agenda.FormularioActivity.onOptionsItemSelected(FormularioActivity.java:33)
        at android.app.Activity.onMenuItemSelected(Activity.java:2912)
        at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:436)
        at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:196)
        at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at android.support.v7.app.AppCompatDelegateImpl.onMenuItemSelected(AppCompatDelegateImpl.java:888)
        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
        at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
        at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
        at android.view.View.performClick(View.java:5201)
        at android.view.View$PerformClick.run(View.java:21163)
        at android.os.Handler.handleCallback(Handler.java:746)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5443)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
solução!

Olá Mateus, agora a exception consegue ajudar a gente.

Na exception a mensagem está dizendo que estamos tentando invocar o método getAluno() numa referência nula. Isso quer dizer que a referência para o helper está nula.

Verifique se você está instanciando o helper no onCreate() da activity do formulário. Você deve ter algo como:

this.helper = new FormularioHelper(this);

Vamos lá! Mais um teste pra ver se funciona!

Muito Obrigado Tutor =D Agora o bug foi Morto kk, Falta de atenção minha :(

Agora ela retorna o numero do objeto alocado na memoria, mas isso resolve na aula Vlw <3 =D