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

Inicializar após a inclusão

Olá,

Após fazer o procedimento de inclusão dos dados como nome, endereço, telefone.... ao rodar novamente o emulador ele nao inicializa, gera um erro e pede pra reiniciar o app. Abaixo o código que apresenta no Android Studio.

Poderia me ajudar?

E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.hdgets.anderson.agenda, PID: 3492
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hdgets.anderson.agenda/com.hdgets.anderson.agenda.ListaAlunosActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6077)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                   Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                      at android.database.CursorWindow.nativeGetLong(Native Method)
                      at android.database.CursorWindow.getLong(CursorWindow.java:511)
                      at android.database.CursorWindow.getInt(CursorWindow.java:578)
                      at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
                      at com.hdgets.anderson.agenda.dao.AlunoDAO.buscaAlunos(AlunoDAO.java:61)
                      at com.hdgets.anderson.agenda.ListaAlunosActivity.onCreate(ListaAlunosActivity.java:24)
                      at android.app.Activity.performCreate(Activity.java:6662)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6077) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Application terminated.
4 respostas

Oi Anderson, tudo bem ?

Cara imagino que você esteja mexendo com a parte do banco de dados e tenha ocorrido esse problema, certo ?

Mostra para gente seu AlunoDao, para gente tentar identificar o erro.

Abraços

package com.hdgets.anderson.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 com.hdgets.anderson.agenda.modelo.Aluno;

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

/**
 * Created by andersonc on 21/02/2017.
 */

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 PRIRAMY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, email TEXT, 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);
    }

    //INSERT SQL
    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("email", aluno.getEmail());
        dados.put("nota", aluno.getNota());

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

    }

    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.setEmail(c.getString(c.getColumnIndex("email")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));

            alunos.add(aluno);
        }

        c.close();
        return alunos;
    }
}
solução!

Anderson,

Dá uma olhadinha nisso aqui cara :

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE Alunos (id_INTEGER PRIRAMY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, email TEXT, nota REAL);";

        db.execSQL(sql);
    }

Acredito que você acabou tendo problemas na hora de digitar o comando de criação do banco, acredito que depois que você solucionar isso, desinstalar o aplicativo do celular e instala-lo novamente deva funcionar.

String sql = "CREATE TABLE Alunos (id INTEGER primary key , nome TEXT NOT NULL, endereco TEXT, telefone TEXT, email TEXT, nota REAL);";

Espero ter ajudado.

Abraços

Feito! Agora funcionando! Muito Obrigado!!