Problem filling a custom list with data from a SQLITE table

0

At the time of making a query this is displayed well in a normal ListView , but when I change the ListView for a custom list I have some problems.

The problem is that in the query the data is in a line generated by the cursor and in the customized list the data is filled one by one.

I attach code.

Code of the class that personalizes the list

package com.example.aguila0017.auxiliarcompras;

import android.app.Activity;
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 Aguila0017 on 7/09/2017.
*/

public class ListaPersonalizada  extends BaseAdapter {


    Context context;
    ArrayList lista;
   String id;
     String  nombre;
    String valor;
    String cantidad;
    String total;
    String dia;
    String mes;
    String ano;
    LayoutInflater inflater;

    public ListaPersonalizada(Activity context, String  id, String  nombre, String  valor, String  cantidad,String  total, String  dia, String  mes, String  ano) {
        this.context = context;
        //this.lista = lista;
        this.id = id;
        this.nombre = nombre;
        this.valor = valor;
        this.cantidad = cantidad;
        this.total = total;
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }
    @Override
    public int getCount() {

        return id.length();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {

        // Declare Variables
        TextView txt1;
        TextView txt2;
        TextView txt3;
        TextView txt4;
        TextView txt5;
        TextView txt6;
        TextView txt7;
        TextView txt8;

        //http://developer.android.com/intl/es/reference/android/view/LayoutInflater.html
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.listapersonalizada, parent, false);

        // Locate the TextViews in listview_item.xml
        txt1= (TextView) itemView.findViewById(R.id.txtID);
        txt2 = (TextView) itemView.findViewById(R.id.txt_PRODUCTO);
        txt3 = (TextView) itemView.findViewById(R.id.TXTvalor);
        txt4 = (TextView) itemView.findViewById(R.id.txtCANTIDAD);
        txt5 = (TextView) itemView.findViewById(R.id.txtDIA);
        txt6 = (TextView) itemView.findViewById(R.id.txtMES);
        txt7 = (TextView) itemView.findViewById(R.id.txtAÑO);
        txt8 = (TextView)itemView.findViewById(R.id.txtTotal);


        // Capture position and set to the TextViews
        txt1.setText(id);
        txt2.setText(nombre);
        txt3.setText(valor);
        txt4.setText(cantidad);
        txt8.setText(total);
        txt5.setText(dia);
        txt6.setText(mes);
        txt7.setText(ano);


        return itemView;
    }
}

Code of the main class in which you try to open the custom list.

          package com.example.aguila0017.auxiliarcompras;

         import android.content.ContentValues;
         import android.content.Intent;
         import android.database.Cursor;
           import android.database.sqlite.SQLiteDatabase;
         import android.support.design.widget.FloatingActionButton; 
          import android.support.design.widget.Snackbar;
           import android.support.v7.app.AppCompatActivity;
           import android.os.Bundle;
           import android.text.format.Time;
           import android.view.View;
           import android.widget.ArrayAdapter;
           import android.widget.Button;
           import android.widget.EditText;
           import android.widget.ListView;
           import android.widget.Toast;

           import java.util.ArrayList;

          import java.util.Date;


           public class MainActivity extends AppCompatActivity {

ListaPersonalizada listaPersonalizada;

EditText et_nombre, et_cantidad, et_valor, et_total, et_acomulador;

int valor=0, total, cantiadad=0 , acomulador=0;

int dia,mes,ano;

int NOMBRE,CANTIDAD,VALOR,TOTAL,DIA,MES,ANO;
int ID;
ListView lista;

Button sumar, btn_ver, btn_NuevaCompra, btn_listaFechas;

ArrayList<String> listado, ListadoFechas;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_principal);
    lista = (ListView)findViewById(R.id.lista);

    lista = (ListView)findViewById(R.id.lista);
    et_nombre = (EditText) findViewById(R.id.et_NomProducto);
    et_cantidad = (EditText) findViewById(R.id.et_cantidad);
    et_valor = (EditText) findViewById(R.id.et_valor);
    et_total = (EditText) findViewById(R.id.et_total);
    et_acomulador=(EditText) findViewById(R.id.et_acomulador);
    sumar = (Button) findViewById(R.id.bt_modifocar);
    btn_ver = (Button)findViewById(R.id.btn_ver);
    btn_NuevaCompra = (Button)findViewById(R.id.btn_NuevaCompra);
    btn_listaFechas = (Button)findViewById(R.id.btn_LFechas);

    btn_listaFechas.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Organizador.class);
            startActivity(i);
        }
    });

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

            Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            int dia=today.monthDay;
            int mes = today.month;
            int year = today.month;

            mes = mes + 1;

            nuevaCompra(dia,mes,year);

            et_nombre.setText("");
            et_cantidad.setText("");
            et_valor.setText("");
            et_acomulador.setText("");
            et_total.setText("");
            acomulador=acomulador-acomulador;

        }
    });

    btn_ver.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, lista.class);
            startActivity(intent);
        }
    });

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.ButtonFloat);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            valor= Integer.valueOf(et_valor.getText().toString());
            cantiadad= Integer.valueOf(et_cantidad.getText().toString());
            total= valor*cantiadad;



            et_total.setText(""+total);

            acomulador = acomulador + total;

            et_acomulador.setText(""+acomulador);

            Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            ano=today.year;
            mes=today.month+1;
            dia = today.monthDay;




            guardar(et_nombre.getText().toString(),valor,cantiadad,total,acomulador,dia,mes,ano);


            et_nombre.setText("");
            et_cantidad.setText("");
            et_valor.setText("");

        }
    });


    /*Boton basico reemplazado por el floatbutton
     FUNCION: añade registros y hace el respectivo calculo de dar el total.

    sumar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            valor= Integer.valueOf(et_valor.getText().toString());
            cantiadad= Integer.valueOf(et_cantidad.getText().toString());
            total= valor*cantiadad;



         et_total.setText(""+total);

            acomulador = acomulador + total;

            et_acomulador.setText(""+acomulador);



            guardar(et_nombre.getText().toString(),valor,cantiadad,total,acomulador);


            et_nombre.setText("");
            et_cantidad.setText("");
            et_valor.setText("");

        }
    });
    */
}

@Override
protected void onPostResume() {
    super.onPostResume();
    Cargarlistado();
}

private void Cargarlistado() {

    listado = lista();

    listaPersonalizada = new ListaPersonalizada(MainActivity.this,lista());
    lista.setAdapter(listaPersonalizada);



private void guardar (String NOMBRE ,int VALOR, int CANTIDAD, int TOTAL ,int ACOMULADO, int DIA, int MES, int ANO){

    BaseHelper helper = new BaseHelper(this,"Demo",null,1);
    SQLiteDatabase db = helper.getWritableDatabase();

    try{
        ContentValues c = new ContentValues();
        c.put("Nombre",NOMBRE);
        c.put("Valor", VALOR);
        c.put("Cantidad",CANTIDAD);
        c.put("Total",TOTAL);
        c.put("Acomulado",ACOMULADO);
        c.put("DIA",DIA);
        c.put("MES",MES);
        c.put("ANO",ANO);

        db.insert("REGISTROS",null,c);
        db.close();

        Toast.makeText(this,"Articulo Ingresado.",Toast.LENGTH_SHORT).show();

    }
    catch (Exception e){

        Toast.makeText(this,"Error: "+e.getMessage(),Toast.LENGTH_SHORT).show();
    }

}

private ArrayList<String> lista(){


    ArrayList<String>datos = new ArrayList<String>();
    BaseHelper helper = new BaseHelper(this,"Demo",null,1);
    SQLiteDatabase db = helper.getReadableDatabase();

    String sql = "select Id, Nombre, Valor, Cantidad, Total, DIA, MES,ANO from Registros";

    Cursor c = db.rawQuery(sql,null);

    if (c.moveToFirst()){
        do{
            String linea = c.getInt(0)+" "+c.getString(1)+" "+c.getInt(2)+" "+c.getInt(3)+" "+c.getInt(4)+" "+c.getInt(5)+" "+c.getInt(6)+" "+c.getInt(7);
            datos.add(linea);



        }while (c.moveToNext());
    }
    db.close();
    return datos;


}

private void nuevaCompra(int DIA, int MES, int YEAR){




    BaseHelper helper = new BaseHelper(this,"Fecha",null,1);
    SQLiteDatabase db = helper.getWritableDatabase();

    try{
        ContentValues c = new ContentValues();
        c.put("DIA",DIA);
        c.put("MES",MES);
        c.put("YEAR",YEAR);



        db.insert("FECHAS",null,c);
        db.close();

        Toast.makeText(this,"Nueva Compra en proceso...",Toast.LENGTH_SHORT).show();

    }
    catch (Exception e){

        Toast.makeText(this,"Error: "+e.getMessage(),Toast.LENGTH_SHORT).show();
    }

}

}

    
asked by Sergio 08.09.2017 в 04:42
source

1 answer

0

Well, what I recommend is that you create an object in which you store all the data obtained by the database cursor and that you pass that object to the custom ListView adapter. In the adapter you get all the data and the samples in the graphical interface. That way the constructor of your adapter does not need to receive so many parameters.

Although if you want to know why your code does not work, it is because the adapter's constructor is passing it the array list, when what it receives is a large number of parameters of type String, so your code must also give syntax error.

Well here goes the solution.

Data Class

/*Objeto que almacena los datos obtenidos de la base de datos.*/

public class Datos {

    String id;
    String nombre;
    String valor;
    String cantidad;
    String total;
    String dia;
    String mes;
    String ano;

    public Datos (String  id, String nombre, String valor, String cantidad, 
        String total, String  dia, String mes, String ano) {

        this.id = id;
        this.nombre = nombre;
        this.valor = valor;
        this.cantidad = cantidad;
        this.total = total;
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    public void getId() {
        return id;
    }

    public void getNombre() {
        return nombre;
    }

    public void getValor() {
        return valor;
    }

    public void getCantidad() {
        return cantidad;
    }

    public void getTotal() {
        return total;
    }

    public void getDia() {
        return dia;
    }

    public void getMes() {
        return mes;
    }

    public void getAno() {
        return ano;
    }

}

Method ready ()

private ArrayList<Datos> lista(){

    ArrayList<Datos> datos = new ArrayList<Datos>();
    BaseHelper helper = new BaseHelper(this,"Demo",null,1);
    SQLiteDatabase db = helper.getReadableDatabase();

    String sql = "select Id, Nombre, Valor, Cantidad, Total, DIA, MES,ANO from Registros";

    Cursor c = db.rawQuery(sql,null);

    if (c.moveToFirst()){
        do{
            // String linea = c.getInt(0)+" "+c.getString(1)+" "+c.getInt(2)+" "+c.getInt(3)+" "+c.getInt(4)+" "+c.getInt(5)+" "+c.getInt(6)+" "+c.getInt(7);
            datos.add(new Datos(c.getInt(0), c.getString(1), c.getInt(2), c.getInt(3),
                c.getInt(4), c.getInt(5), c.getInt(6), c.getInt(7)));

        }while (c.moveToNext());
    }

    db.close();
    return datos;
}

Personalized List

public class ListaPersonalizada extends BaseAdapter {

    Context context;
    ArrayList<Datos> lista;
    LayoutInflater inflater;

    public ListaPersonalizada(Activity context, ArrayList<Datos> lista) {
        this.context = context;
        this.lista = lista;
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {

        // Declare Variables
        TextView txt1;
        TextView txt2;
        TextView txt3;
        TextView txt4;
        TextView txt5;
        TextView txt6;
        TextView txt7;
        TextView txt8;

        //http://developer.android.com/intl/es/reference/android/view/LayoutInflater.html
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.listapersonalizada, parent, false);

        // Locate the TextViews in listview_item.xml
        txt1= (TextView) itemView.findViewById(R.id.txtID);
        txt2 = (TextView) itemView.findViewById(R.id.txt_PRODUCTO);
        txt3 = (TextView) itemView.findViewById(R.id.TXTvalor);
        txt4 = (TextView) itemView.findViewById(R.id.txtCANTIDAD);
        txt5 = (TextView) itemView.findViewById(R.id.txtDIA);
        txt6 = (TextView) itemView.findViewById(R.id.txtMES);
        txt7 = (TextView) itemView.findViewById(R.id.txtAÑO);
        txt8 = (TextView)itemView.findViewById(R.id.txtTotal);

        // Obtienes los datos
        String id = lista.get(position).getId();
        String nombre = lista.get(position).getNombre();
        String valor = lista.get(position).getValor();
        String cantidad = lista.get(position).getCantidad();
        String total = lista.get(position).getTotal();
        String dia = lista.get(position).getDia();
        String mes = lista.get(position).getMes();
        String ano = lista.get(position).getAno();


        // Capture position and set to the TextViews
        txt1.setText(id);
        txt2.setText(nombre);
        txt3.setText(valor);
        txt4.setText(cantidad);
        txt8.setText(total);
        txt5.setText(dia);
        txt6.setText(mes);
        txt7.setText(ano);


        return itemView;
    }
}
    
answered by 08.09.2017 / 06:14
source