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

Agenda keeps stopping

Fala galera, depois de criar o banco de dados eu não consigo mais usar, o aplicativo sequer abre, o erro é esse exibido

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.arcsolucoes.agenda, PID: 5380
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.arcsolucoes.agenda/br.com.arcsolucoes.agenda.listaalunos}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                      at android.app.ActivityThread.-wrap11(Unknown Source:0)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                   Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
                      at android.database.AbstractCursor.checkPosition(AbstractCursor.java:468)
                      at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
                      at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
                      at br.com.arcsolucoes.agenda.DAO.AlunoDAO.buscaAlunos(AlunoDAO.java:61)
                      at br.com.arcsolucoes.agenda.listaalunos.onCreate(listaalunos.java:25)
                      at android.app.Activity.performCreate(Activity.java:7000)
                      at android.app.Activity.performCreate(Activity.java:6991)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                      at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                      at android.os.Handler.dispatchMessage(Handler.java:106) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
Application terminated.
5 respostas

Fala ai Pedro, de boa ?

O que você tentou implentar que gerou essa exception ?

Fala ai Matheus, Acho que foi por causa do SQL, vou mandar o código do AlunoDao aqui

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

public class AlunoDAO extends SQLiteOpenHelper {
    public AlunoDAO(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;)";
        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

        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(){
    String sql = "SELECT * FROM Alunos;";
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery(sql, null);
    List<Aluno> alunos = new ArrayList<Aluno>();
    while (cursor.moveToNext()) ;
        {
           Aluno aluno = new Aluno();
           aluno.setId(cursor.getLong(cursor.getColumnIndex("id")));
           aluno.setNome(cursor.getString(cursor.getColumnIndex("nome")));
           aluno.setEndereco(cursor.getString(cursor.getColumnIndex("endereco")));
           aluno.setTelefone(cursor.getString(cursor.getColumnIndex("telefone")));
           aluno.setSite(cursor.getString(cursor.getColumnIndex("site")));
           aluno.setNota(cursor.getDouble(cursor.getColumnIndex("nota")));
           alunos.add(aluno);
                }

                cursor.close();
                return alunos;
            }
        }

Dá uma olhadinha nisso :

String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, site TEXT, nota REAL;)";

Acho que você errou aqui. O ponto e vírgula fica fora do paratenses.

Mudei aqui, mas o erro continua.


    @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);";
        db.execSQL(sql);

    }
solução!

Consegui resolver aqui, era um erro nessa linha aqui.

    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM Alunos;", null);