android.database.Cursorindexoutofboundsexception: Index 0 requested, with a size of 0

Asked

Viewed 333 times

0

I’m having trouble adding some products to a listview by clicking a button

error:

06-09 11:30:16.963 2847-2847/realsysten.com.br.sigarestaurante E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: realsysten.com.br.sigarestaurante, PID: 2847
                                                                             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.getString(AbstractWindowedCursor.java:50)
                                                                                 at realsysten.com.br.sigarestaurante.BancoController.carregaProdutoId(BancoController.java:162)
                                                                                 at realsysten.com.br.sigarestaurante.RealizarPedidoActivity$1.onClick(RealizarPedidoActivity.java:87)
                                                                                 at android.view.View.performClick(View.java:5198)
                                                                                 at android.view.View$PerformClick.run(View.java:21147)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

let the classes:

Products:

    package realsysten.com.br.sigarestaurante;

/**
 * Created by Vitor on 09/06/2016.
 */
public class Produtos {

    private int linha;
    private String id;
    private String descricao;
    private String unidade;
    private String qtd;
    private String total;

    public Produtos(int linha){
        this.linha = linha;
    }

    public Produtos(String id, String descricao, String unidade, String qtd, String total) {
        this.id = id;
        this.descricao = descricao;
        this.unidade = unidade;
        this.qtd = qtd;
        this.total = total;
    }

    public int getLinha() {
        return linha;
    }

    public void setLinha(int linha) {
        this.linha = linha;
    }

    public String getId() {
        return id;
    }

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

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getUnidade() {
        return unidade;
    }

    public void setUnidade(String unidade) {
        this.unidade = unidade;
    }

    public String getQtd() {
        return qtd;
    }

    public void setQtd(String qtd) {
        this.qtd = qtd;
    }

    public String getTotal() {
        return total;
    }

    public void setTotal(String total) {
        this.total = total;
    }
}

Productosadapter:

package realsysten.com.br.sigarestaurante;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Vitor on 09/06/2016.
 */
public class ProdutosAdapter extends BaseAdapter {

    private LayoutInflater prodInf;
    private ArrayList<Produtos> produtos;

    public ProdutosAdapter(Context context, ArrayList<Produtos> produtos){
        this.produtos = produtos;
        prodInf = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return produtos.size();
    }

    @Override
    public Object getItem(int position) {
        Produtos produto = produtos.get(position);
        return produtos.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        Produtos produto = produtos.get(position);
        view = prodInf.inflate(R.layout.modelo_addproduto, null);

        ((TextView)view.findViewById(R.id.lblPId)).setText(produto.getId());
        ((TextView)view.findViewById(R.id.lblPDescricao)).setText(produto.getDescricao());
        ((TextView)view.findViewById(R.id.lblPQtd)).setText(produto.getQtd());
        ((TextView)view.findViewById(R.id.lblPUnit)).setText(produto.getUnidade());
        ((TextView)view.findViewById(R.id.lblPTotal)).setText(produto.getTotal());

        return view;
    }

    public ArrayList<Produtos> getProdutos(){
        return produtos;
    }
}

Fulfilled:

package realsysten.com.br.sigarestaurante;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 * Created by Vitor on 08/06/2016.
 */
public class RealizarPedidoActivity extends AppCompatActivity {

    EditText atendente;
    EditText mesa;
    EditText proCodigo;
    EditText quantidade;
    EditText valorU;
    EditText valorT;

    Button Confirmar;
    Button Adicionar;

    ListView lista;

    BancoController crud;

    ProdutosAdapter produtosAdapter;
    ArrayList<Produtos> produtos;

    String data;
    String hora;
    String codigoP;
    String qtd;
    String sTotal;
    String novoId;
    String novaDescricao;
    String novaQtd;
    String novoUnidade;
    String novoTotal;

    double unidade;
    double total;
    double vlrTotal = 0;

    int quant;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.realizar_pedido);

        atendente = (EditText) findViewById(R.id.edtAtendente);
        mesa = (EditText) findViewById(R.id.edtMesa);
        proCodigo = (EditText) findViewById(R.id.edtProCodigo);
        quantidade = (EditText) findViewById(R.id.edtQtd);
        valorU = (EditText) findViewById(R.id.edtValorU);
        valorT = (EditText) findViewById(R.id.edtValorT);

        Confirmar = (Button) findViewById(R.id.btnConPedido);
        Adicionar = (Button) findViewById(R.id.btnadd);

        lista = (ListView) findViewById(R.id.lstComanda);

        data = new SimpleDateFormat("dd/" + "MM" + "/yyyy").format(new Date());
        hora = new SimpleDateFormat("HH:mm:SS").format(new Date());

        crud = new BancoController(getBaseContext());

        Adicionar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                codigoP = proCodigo.getText().toString();
                qtd = quantidade.getText().toString();

                Cursor cursor = crud.carregaProdutoById(Integer.parseInt(codigoP));

                String rDescricao = cursor.getString(cursor.getColumnIndexOrThrow(
                        CriaBanco.getProDescricao()));

                String rUnidade = cursor.getString(cursor.getColumnIndexOrThrow(
                        CriaBanco.getProPunitVenda()));

                //crud.op = 1;
                //String rDescricao = crud.carregaProdutoId(Integer.parseInt(codigoP));
                //crud.op = 2;
                //String rUnidade = crud.carregaProdutoId(Integer.parseInt(codigoP));

                unidade = Double.parseDouble(rUnidade);
                String valida = qtd;


                if (valida.equals("")) {
                    valida = "0";
                    qtd = valida;
                }
                quant = Integer.parseInt(qtd);

                if (quant > 0) {
                    total = unidade * quant;

                    sTotal = String.valueOf(total);

                    novoId = codigoP;
                    novaDescricao = rDescricao;
                    novaQtd = qtd;
                    novoUnidade = rUnidade;
                    novoTotal = sTotal;

                    int linhas = 0;

                    if (linhas == 0) {
                        linhas = 1;
                        for (int i = 0; i < linhas; i++) {
                            vlrTotal = vlrTotal + total;
                        }
                    } else {
                        ArrayList<Produtos> produtos = produtosAdapter.getProdutos();
                        linhas = produtos.size();
                        for (int i = 0; i < linhas; i++) {
                            vlrTotal = vlrTotal + total;
                        }

                    }
                    valorT.setText(String.valueOf(vlrTotal));

                    Produtos item = new Produtos(novoId, novaDescricao, novoUnidade, novaQtd,
                            novoTotal);

                    produtos.add(item);

                    produtosAdapter = new ProdutosAdapter(getBaseContext(), produtos);

                    lista.setAdapter(produtosAdapter);
                    setListViewHeightBasedOnItems(lista);
                } else {
                    Toast.makeText(getApplicationContext(), "Informe uma quantidade acima de zero", Toast.LENGTH_LONG).show();
                }
            }
        });

        Confirmar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

    public static boolean setListViewHeightBasedOnItems(ListView listView) {

        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter != null) {

            int numberOfItems = listAdapter.getCount();
            int totalItemsHeight = 0;

            for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {

                float px = 300 * (listView.getResources().getDisplayMetrics().density);

                View item = listAdapter.getView(itemPos, null, listView);
                item.measure(View.MeasureSpec.makeMeasureSpec((int) px, View.MeasureSpec.AT_MOST),
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                totalItemsHeight += item.getMeasuredHeight();
            }

            int totalDividersHeight = listView.getDividerHeight() * (numberOfItems - 1);
            int totalPadding = listView.getPaddingTop() + listView.getPaddingBottom();

            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalItemsHeight + totalDividersHeight + totalPadding;
            listView.setLayoutParams(params);
            listView.requestLayout();

            return true;
        } else {
            return false;
        }
    }
}

Bancocontroller:

   public Cursor carregaProdutoById(int id){
    Cursor cursor;
    String[] campos = {banco.getProCodigo(), banco.getProDescricao(),
            banco.getProPunitVenda()};
    String where = CriaBanco.getProCodigo() + " = " + id;
    db = banco.getReadableDatabase();
    cursor = db.query(CriaBanco.getProTabela(), campos, where, null, null, null, null);

    if(cursor != null){
        cursor.moveToFirst();
    }
    return cursor;
}

I debugged the codes and it goes through the controller, product and etc... straight, only, after passing through the product class and reaches this line in the:

produtos.add(item);

the above mentioned error occurs.

someone knows why?

thanks since you

1 answer

0


already solved this problem, after carefully observing the code of the Realizapedido, I saw that I forgot to initialize the list of products

Produtos = new ArrayList<Produtos>();

this is all I had forgotten, thank you for your attention.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.