Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

11
respostas

Erro ao rodar o App

at com.example.nbrasil.geradorsuntech.DAO.ListaDAO.buscaLista(ListaDAO.java:67) at com.example.nbrasil.geradorsuntech.ListaMainActivity.onCreate(ListaMainActivity.java:28)

11 respostas
public class ListaDAO extends SQLiteOpenHelper {
//toda vez que eu tiver que atualizar o banco mudo a versão para a nova versão ex:2.


    public ListaDAO(Context context) {
        super(context, "Gerador", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String sql = "CREATE TABLE Lista (id INTEGER PRIMARY KEY, date TEXT NOT NULL, batV TEXT, diesel TEXT, horaIni TEXT, cargaW TEXT, cargaVA TEXT, horaFim TEXT, totalHR TEXT, responsavel TEXT);";
        db.execSQL(sql);
    }

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

    }

    public void insere(Lista lista) {
        SQLiteDatabase db = getWritableDatabase();
        //fucioona como o map do java

        ContentValues dados = new ContentValues();
        dados.put("id", lista.getId());
        dados.put("date", lista.getDate());
        dados.put("batV", lista.getBatV());
        dados.put("diesel", lista.getDiesel());
        dados.put("horaIni", lista.getHoraIni());
        dados.put("cargaW", lista.getCargaW());
        dados.put("cargaVA", lista.getCargaVA());
        dados.put("horaFim", lista.getHoraFim());
        dados.put("totalHR", lista.getTotalHR());
        dados.put("responsavel", lista.getResponsavel());


        db.insert("Lista", null, dados);
    }
    //busca no SQL         // Cursor como se fosse um ponteiro
    public List<Lista> buscaLista() {
        String sql = "SELECT * FROM Lista;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);


        List<Lista> lista = new ArrayList<Lista>();
        while  (c.moveToNext()); {
            Lista lista1 = new Lista();
            lista1.setId(c.getLong(c.getColumnIndex("id")));
            lista1.setDate(c.getString(c.getColumnIndex("date")));
            lista1.setBatV(c.getString(c.getColumnIndex("batV")));
            lista1.setDiesel(c.getString(c.getColumnIndex("diesel")));
            lista1.setHoraIni(c.getString(c.getColumnIndex("horaIni")));
            lista1.setCargaW(c.getString(c.getColumnIndex("cargaW")));
            lista1.setCargaVA(c.getString(c.getColumnIndex("cargaVA")));
            lista1.setHoraFim(c.getString(c.getColumnIndex("horaFim")));
            lista1.setTotalHR(c.getString(c.getColumnIndex("totalHR")));
            lista1.setResponsavel(c.getString(c.getColumnIndex("responsavel")));

            lista.add(lista1);
        }
        c.close();
        return lista;
    }
}
public class Lista {

    private Long id;
    private String date;
    private String batV;
    private String diesel;
    private String horaIni;
    private String cargaW;
    private String cargaVA;
    private String horaFim;
    private String totalHR;
    private String responsavel;

    public Long getId() {
        return id;
    }

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

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getBatV() {
        return batV;
    }

    public void setBatV(String batV) {
        this.batV = batV;
    }

    public String getDiesel() {
        return diesel;
    }

    public void setDiesel(String diesel) {
        this.diesel = diesel;
    }

    public String getHoraIni() {
        return horaIni;
    }

    public void setHoraIni(String horaIni) {
        this.horaIni = horaIni;
    }

    public String getCargaW() {
        return cargaW;
    }

    public void setCargaW(String cargaW) {
        this.cargaW = cargaW;
    }

    public String getCargaVA() {
        return cargaVA;
    }

    public void setCargaVA(String cargaVA) {
        this.cargaVA = cargaVA;
    }

    public String getHoraFim() {
        return horaFim;
    }

    public void setHoraFim(String horaFim) {
        this.horaFim = horaFim;
    }

    public String getTotalHR() {
        return totalHR;
    }

    public void setTotalHR(String totalHR) {
        this.totalHR = totalHR;
    }

    public String getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(String responsavel) {
        this.responsavel = responsavel;
    }

    @Override
    public String toString() {
        return getDate() + " - " + getResponsavel() ;
    }
}
package com.example.nbrasil.geradorsuntech;

import android.app.Activity;
import android.widget.EditText;

import com.example.nbrasil.geradorsuntech.modelo.Lista;

public class FormularioHelper {


    private final EditText campoDate;
    private final EditText campoBatV;
    private final EditText campoDiesel;
    private final EditText campoHoraIni;
    private final EditText campoCargaW;
    private final EditText campoCargaVA;
    private final EditText campoHoraFim;
    private final EditText campoTotalhr;
    private final EditText campoResponsavel;


    public FormularioHelper (FormularioLista activity) {

         campoDate = (EditText) activity.findViewById(R.id.formulario_date);
         campoBatV  = (EditText) activity.findViewById(R.id.formulario_batv);
         campoDiesel = (EditText) activity.findViewById(R.id.formulario_diesel);
         campoHoraIni = (EditText) activity.findViewById(R.id.formulario_horaini);
         campoCargaW = (EditText) activity.findViewById(R.id.formulario_cargaw);
         campoCargaVA = (EditText) activity.findViewById(R.id.formulario_cargava);
         campoHoraFim = (EditText) activity.findViewById(R.id.formulario_horafim);
         campoTotalhr = (EditText) activity.findViewById(R.id.formulario_totalhr);
         campoResponsavel = (EditText) activity.findViewById(R.id.formulario_respo);


    }

    public Lista pegaLista() {
        Lista lista = new Lista();
        lista.setDate(campoDate.getText().toString());
        lista.setBatV(campoBatV.getText().toString());
        lista.setDate(campoDiesel.getText().toString());
        lista.setDate(campoHoraIni.getText().toString());
        lista.setDate(campoCargaW.getText().toString());
        lista.setDate(campoCargaVA.getText().toString());
        lista.setDate(campoHoraFim.getText().toString());
        lista.setDate(campoTotalhr.getText().toString());
        lista.setDate(campoResponsavel.getText().toString());
        return lista;
    }
}
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 com.example.nbrasil.geradorsuntech.DAO.ListaDAO;
import com.example.nbrasil.geradorsuntech.modelo.Lista;

import java.lang.reflect.Array;
import java.util.List;

public class ListaMainActivity extends AppCompatActivity {

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

        //conexao


        ListaDAO DAO = new ListaDAO(this);
        List<Lista> lista = DAO.buscaLista();
        DAO.close();


        ListView listaItens = (ListView) findViewById(R.id.lista_itens);
        ArrayAdapter<Lista> adapter = new ArrayAdapter<Lista>(this, android.R.layout.simple_list_item_1, lista);
        listaItens.setAdapter(adapter);

        //botaoparacriarnovalista

        Button novo = (Button) findViewById(R.id.botao_novo);
        novo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaMainActivity.this, FormularioLista.class);
                startActivity(intentVaiProFormulario);
            }
        });
    }
}
public class FormularioLista extends AppCompatActivity {

    private FormularioHelper helper;

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

         helper = new FormularioHelper(this);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.menu_formulario, menu);

        return super.onCreateOptionsMenu(menu);

    }

    //botao de salvar o aluno

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Lista Lista = helper.pegaLista();
                ListaDAO DAO = new ListaDAO(this);
                DAO.insere(Lista);
                DAO.close();

                Toast.makeText(FormularioLista.this, "Lista Salva!", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}
6-26 18:00:47.119 11164-11164/com.example.nbrasil.geradorsuntech E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.nbrasil.geradorsuntech, PID: 11164
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nbrasil.geradorsuntech/com.example.nbrasil.geradorsuntech.ListaMainActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
        at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
        at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
        at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
        at com.example.nbrasil.geradorsuntech.DAO.ListaDAO.buscaLista(ListaDAO.java:67)
        at com.example.nbrasil.geradorsuntech.ListaMainActivity.onCreate(ListaMainActivity.java:28)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Fala ai Natan, de boa?

Cara faz um teste um tanto quanto idiota ai, no seu select faz isso :

        String sql = "SELECT * FROM Lista";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);

Está assim

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

E continua o mesmo erro ;/

Por favor ajude

Consegue colocar no github e me mandar.?

1º coisa: na sua busca você tá matando o cursor, rs.Não havia reparado antes, contudo dá uma olhadinha nisso:

        while  (c.moveToNext()); {

você coloca um ; que faz o while parar ali.

só precisa tirar isso e já resolve o problema.

Contudo você vai ter outro problema na hora de inserir seus dados, dá uma olhadinha no seu helper

public Lista pegaLista() {
        Lista lista = new Lista();
        lista.setDate(campoDate.getText().toString());
        lista.setBatV(campoBatV.getText().toString());
        lista.setDate(campoDiesel.getText().toString());
        lista.setDate(campoHoraIni.getText().toString());
        lista.setDate(campoCargaW.getText().toString());
        lista.setDate(campoCargaVA.getText().toString());
        lista.setDate(campoHoraFim.getText().toString());
        lista.setDate(campoTotalhr.getText().toString());
        lista.setDate(campoResponsavel.getText().toString());
        return lista;
    }

voce tá populando apenas o atributo date, precisa fazer os setters corretamente.