I'm having trouble adding some products to a listview at the click of 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;
}
}
ProductsAdapter:
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;
}
}
RealizarPedido:
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 ... right, only, after going through the class products and arrives at this line in the RealizarPedido:
produtos.add(item);
The above error occurs.
Does anyone know why?
thank you from ja