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

Não está exibindo a lista dos alunos cadastrados

Olá a todos, boa tarde.

Estou tentando exibir a lista de alunos cadastrados, mas apesar de não acusar erro no insert na camada DAO, ele não exibe os alunos?

Como posso depurar melhor esse comportamento?

Segue abaixo meu código fonte:

FormulárioActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

import [meu-package].agenda2.dao.AlunoDAO;
import [meu-package].agenda2.modelo.Aluno;

import static [meu-package].agenda2.R.*;

public class FormularioActivity extends AppCompatActivity {
    private FormularioHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(layout.activity_formulario);
        this.helper = new FormularioHelper(this);
    }

    @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 id.menu_formulario_ok:
                Aluno aluno = helper.getAluno();
                AlunoDAO dao = new AlunoDAO(this);

                dao.insere(aluno);
                dao.close();
                Toast.makeText(FormularioActivity.this, "Aluno "+ aluno.getNome() +" salvo em nome de jesus amém!", Toast.LENGTH_SHORT ).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

AlunoDAO.java

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

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

import [meu-package].agenda2.modelo.Aluno;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE alunos (id integer primary key, nome varchar not null, endereco varchar not null, telefone varchar not null, site varchar not null, nota real);";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS alunos;";
        db.execSQL(sql);
        onCreate(db);
    }

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        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());
        db.insert("alunos", null,dados);
    }

    public List<Aluno> buscaAlunos() {
        List<Aluno> alunos = new ArrayList<Aluno>();
        String sql = "Select * FROM alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(sql, null);
        Aluno aluno = new Aluno();
        while(!cursor.moveToNext()) {
            aluno.setId(cursor.getLong(cursor.getColumnIndex("id")));
            aluno.setNome(cursor.getString(cursor.getColumnIndex("nome")));
            aluno.setTelefone(cursor.getString(cursor.getColumnIndex("telefone")));
            aluno.setEndereco(cursor.getString(cursor.getColumnIndex("endereco")));
            aluno.setSite(cursor.getString(cursor.getColumnIndex("site")));
            aluno.setNota(cursor.getDouble(cursor.getColumnIndex("nota")));
            alunos.add(aluno);
        }
        cursor.close();

        return alunos;
    }
}
2 respostas
solução!

Continuando...

ListaAlunosActivity.java

package vigili.me.agenda2;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.List;

import vigili.me.agenda2.dao.AlunoDAO;
import vigili.me.agenda2.modelo.Aluno;

public class ListaAlunosActivity extends AppCompatActivity {

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

        Button novoalunobotao = findViewById(R.id.lista_alunos_botao_novo_aluno);

        novoalunobotao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentNovoAluno = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentNovoAluno);
            }
        });
    }

    private void loadList() {
        AlunoDAO alunoDAO = new AlunoDAO(this);
        List<Aluno> alunos = alunoDAO.buscaAlunos();
        alunoDAO.close();
        //String[] alunos = {"Guilherme", "outro Guilherme", "outro outro guilherme","Guilherme", "outro Guilherme", "outro outro guilherme","Guilherme", "outro Guilherme", "outro outro guilherme","Guilherme", "outro Guilherme", "outro outro guilherme","Guilherme", "outro Guilherme", "outro outro guilherme"};
        ArrayAdapter<Aluno> arrayAdapter;
        arrayAdapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        ListView listaAlunos = (ListView) findViewById(R.id.lista_alunos);
        listaAlunos.setAdapter(arrayAdapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadList();
    }
}

O que posso usar para consultar o banco sqlite direto?

Esquece, eu que errei o while (coloquei um !cursor.moveToNext())