PRACTICA 10: Android: Consultar Productos
Ing. Honoria Reyes Macedo
IDE: Android Studio
Lenguaje
de programación para móviles: Java
Sistema
Operativo de desarrollo: Windows
Sistema
Operativo de Ejecución: Android
Base
de datos: SQLite
INTRODUCCION
En
esta práctica se hace una consulta en la base de datos SQLite.
La
información se presenta organizada en un componente GridView que se llena
mediante un adaptador.
El adaptador pone la información
de cada producto dentro de un layout ítem. Y al final los envía al GridView
ACTIVIDADES
1.- En la carpeta drawable guardar un icono del producto con nombre no.png
2.- En el archivo strings.xml
- Cambiar la leyenda de la etiqueta “menu_gallery”, poner la leyenda Libros
en Existencia (De acuerdo al tema que se escogió).
3.- En el archivo fragment_gallery.xml
agregar un componente GridView
- Modificarle 5 atributos:
gravity = center
horizontalSpacing = 10dp
id =
gridVProductos
numColumns = 2
verticalSpacing = 10dp
- Quedaría así, posteriormente quitaremos lo que corresponde al TextView
4.- Crear un nuevo Layout para organizar el contenido de la
consulta
- Generar un Layout(xml) que se llame producto_items
- Agregar los siguientes componentes:
1 ImageView con id= imgViewProd y background= @drawable/no
1 TextView con id=textVProd
1 TextView con id=textVPrecio
El LinearLayout deberá ser orientation
= vertical
- Sus atributos quedarían así:
- En modo Codigo
quedaria así:
5.- Editar la clase ProductoADO
Agregar el método llenaProd() y declarar la variable ObjProd;
- Sus librerías quedarían así:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
6.- Crear una clase adapter
6.1- Crear la clase ProductoAdapter para adaptar los valores de
producto en un GridView
6.2 Implementar sus métodos
Quedaría así:
6.3- Modificar el contenido de sus métodos, agregar su constructor y agregar la clase ViewHolder (texto rojo)
package com.example.control_hrm;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class ProductoAdapter extends BaseAdapter {
private Context context;
private int layout;
private ArrayList<Producto>
arrayProducto;
public ProductoAdapter(Context context, int layout,
ArrayList<Producto> productos) {
this.context=
context;
this.layout =
layout;
this.arrayProducto =
productos;
}
@Override
public int getCount() {
return arrayProducto.size();
}
@Override
public Object getItem(int i)
{
return arrayProducto.get(i);
}
@Override
public long getItemId(int i)
{
return i;
}
@Override
public View getView(int i,
View view, ViewGroup viewGroup) {
View row = view;
ViewHolder holder = new ViewHolder();
String archivo;
if(row == null){
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout,
null);
holder.loc_textVProd =
(TextView) row.findViewById(R.id.textVProd);
holder.loc_textVPrecio =
(TextView) row.findViewById(R.id.textVPrecio);
holder.loc_imgViewProd =
(ImageView) row.findViewById(R.id.imgViewProd);
row.setTag(holder);
}
else {
holder = (ViewHolder)
row.getTag();
}
Producto prod = arrayProducto.get(i);
holder.loc_textVProd.setText(prod.getNombreprod());
holder.loc_textVPrecio.setText(String.valueOf(prod.getPrecioprod()));
archivo = prod.getFotoprod();
if (archivo==null){archivo="no";}else{
String[] palabra = archivo.split("\\.");
archivo = palabra[0];
}
String getPkg=context.getPackageName();
int aux=context.getResources().getIdentifier(archivo,
"drawable",getPkg);
holder.loc_imgViewProd.setImageResource(aux);
return row;
}
private class ViewHolder{
ImageView loc_imgViewProd;
TextView loc_textVProd, loc_textVPrecio;
}
}
7.- Modificar el archivo GalleryFragment
Al Reconstruir y
Ejecutar quedaria así:
************************************************************************
ANEXO I: Insertar datos directamente en la Base de Datos
Agregar el procedimiento insertarValorProd() a la clase ProductoADO
(líneas en azul).
Modificar el nombre de las imágenes por las que se tienen en drawable
Nota: Se tienen que tener al menos 3 imágenes de productos guardadas en la carpeta drawable
Agregar la llamada del procedimiento creado dentro del
procedimiento llenaProd (línea en azul)
Nota: Solo ejecutarlo una vez, y borrar esta línea para que no
provoque error por claves duplicadas
********************************************************************
ANEXO II
DBhelper.java
package com.example.control_hrm;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBhelper extends SQLiteOpenHelper {
Producto campohelp = new Producto();
static final String DB_NAME = "Libros.db";
static final int DB_VERSION = 1;
private final String CREATE_TABLE = "create table if not exists "
+ campohelp.getTabla() + "(" + campohelp.getCampos() + " );";
public DBhelper(@Nullable Context context) {
super(context, DB_NAME, null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + campohelp.getTabla());
onCreate(sqLiteDatabase);
}
}
*****************************************************
Producto.java

package com.example.control_hrm;
import java.util.Date;
public class Producto {
private int cveprod;
private String nombreprod;
private String autorprod;
private double precioprod;
private String fotoprod;
private Date fechacaptura;
private boolean activo;
private String campos;
private String tabla;
public Producto() { }
public Producto(int cveprod, String nombreprod, String autorprod, double precioprod, String fotoprod, Date fechacaptura, boolean activo) {
this.cveprod = cveprod;
this.nombreprod = nombreprod;
this.autorprod = autorprod;
this.precioprod = precioprod;
this.fotoprod = fotoprod;
this.fechacaptura = fechacaptura;
this.activo = activo;
}
public String getTabla(){
this.tabla="producto";
return tabla;
}
public String getCampos(){
this.campos= "cveprod Integer primary key, " +
"nombreprod Text, " +
"autorprod Text, " +
"precioprod Text, " +
"fotoprod Text, " +
"fechacaptura Text, " +
"activo Integer ";
return campos;
}
public int getCveprod() {
return cveprod;
}
public void setCveprod(int cveprod) {
this.cveprod = cveprod;
}
public String getNombreprod() {
return nombreprod;
}
public void setNombreprod(String nombreprod) {
this.nombreprod = nombreprod;
}
public String getAutorprod() {
return autorprod;
}
public void setAutorprod(String autorprod) {
this.autorprod = autorprod;
}
public double getPrecioprod() {
return precioprod;
}
public void setPrecioprod(double precioprod) {
this.precioprod = precioprod;
}
public String getFotoprod() {
return fotoprod;
}
public void setFotoprod(String fotoprod) {
this.fotoprod = fotoprod;
}
public Date getFechacaptura() {
return fechacaptura ;
}
public void setFechacaptura(Date fechacaptura) {
this.fechacaptura = fechacaptura;
}
public boolean isActivo() {
return activo;
}
public void setActivo(boolean activo) {
this.activo = activo;
}
}
*****************************************************
ProductoADO.java
****************************************************************
ANEXO III AGREGAR UN COMPONENTE MAS A LA CONSULTA
1.- Agregar un TextView con id= textVAutor (lineas en azul)
2.- Agregar el atributo loc_textVAutor en la clase ViewHolder (línea azul)
3.- Agregar el llenado del atributo loc_textVAutor en el método getView (líneas azules)
--------------------------------------------0---0---------------------------
-----------------------------------------000------000---------------------