Se crea primero un Activity de ABM o CRUD de una tabla de SQLite, el último botón (Listar Registros) llama al segundo Activity y muestra el listado, además se utiliza una clase que hereda de SQLiteOpenHelper.
1) Crear nuevo proyecto de Android Studio
2) Crear emptyActivity: activity_main.xml, MainActivity.java
3) Crear clase auxiliar AdminSQLiteOpenHelper.java
4) Crear emptyActivity: activity_lista_registros.xml, ListaRegistros.java
5) Ejecutar proyecto
6) Primero crear algunos registros
7) Presionar botón Listar Registros
Se incluye código de lo .xml de las 2 actividades.
NOTAS:
- El nombre de la base de datos "administracion", de la tabla "articulos" así como los campos deben coincidir entre las clases AdminSQLiteOpenHelper.java y MainActivity.java
- El activity del ABM se basa en el tutorial de ejemplo en http://www.tutorialesprogramacionya.com/javaya/androidya/androidstudioya/detalleconcepto.php?codigo=16&inicio=0
A continuación se anexan los códigos.
##########
2) Crear emptyActivity activity_main.xml, MainActivity.java
PRIMER Activity
activity_main.xml
##########
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="codigo"
android:inputType="number" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Descripción Articulo"
android:inputType="textPersonName" />
<EditText
android:id="@+id/et3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Precio"
android:inputType="numberDecimal" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="alta"
android:text="Alta" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="consultaporcodigo"
android:text="Consulta por código" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="consultapordescripcion"
android:text="Consulta por Descripción" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="bajaporcodigo"
android:text="Baja" />
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="modificacion"
android:text="Modificar" />
<Button
android:id="@+id/btnListar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="listarRegistos"
android:text="Listar Registros" />
</LinearLayout>
################
Clase de actividad ABM o CRUD
MainActivity.java
################
/**
* 1. Activity para ABM o CRUD de una tabla de SQLite
* Basado en:
* Almacenamiento en una base de datos SQLite
* http://www.tutorialesprogramacionya.com/javaya/androidya/androidstudioya/detalleconcepto.php?codigo=16&inicio=0
*
* 2. Llama segundo Activity con listado de registros de SQLite
*
*/
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText et1,et2,et3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.et1);
et2=(EditText)findViewById(R.id.et2);
et3=(EditText)findViewById(R.id.et3);
}
public void alta(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String cod = et1.getText().toString();
String descri = et2.getText().toString();
String pre = et3.getText().toString();
ContentValues registro = new ContentValues();
registro.put("codigo", cod);
registro.put("descripcion", descri);
registro.put("precio", pre);
bd.insert("articulos", null, registro);
bd.close();
et1.setText("");
et2.setText("");
et3.setText("");
Toast.makeText(this, "Se cargaron los datos del artículo",
Toast.LENGTH_SHORT).show();
}
public void consultaporcodigo(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String cod = et1.getText().toString();
Cursor fila = bd.rawQuery(
"select descripcion,precio from articulos where codigo=" + cod, null);
if (fila.moveToFirst()) {
et2.setText(fila.getString(0));
et3.setText(fila.getString(1));
} else
Toast.makeText(this, "No existe un artículo con dicho código",
Toast.LENGTH_SHORT).show();
bd.close();
}
public void consultapordescripcion(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String descri = et2.getText().toString();
Cursor fila = bd.rawQuery(
"select codigo,precio from articulos where descripcion='" + descri +"'", null);
if (fila.moveToFirst()) {
et1.setText(fila.getString(0));
et3.setText(fila.getString(1));
} else
Toast.makeText(this, "No existe un artículo con dicha descripción",
Toast.LENGTH_SHORT).show();
bd.close();
}
public void bajaporcodigo(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String cod= et1.getText().toString();
int cant = bd.delete("articulos", "codigo=" + cod, null);
bd.close();
et1.setText("");
et2.setText("");
et3.setText("");
if (cant == 1)
Toast.makeText(this, "Se borró el artículo con dicho código",
Toast.LENGTH_SHORT).show();
else
Toast.makeText(this, "No existe un artículo con dicho código",
Toast.LENGTH_SHORT).show();
}
public void modificacion(View v) {
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
String cod = et1.getText().toString();
String descri = et2.getText().toString();
String pre = et3.getText().toString();
ContentValues registro = new ContentValues();
registro.put("codigo", cod);
registro.put("descripcion", descri);
registro.put("precio", pre);
int cant = bd.update("articulos", registro, "codigo=" + cod, null);
bd.close();
if (cant == 1)
Toast.makeText(this, "se modificaron los datos", Toast.LENGTH_SHORT)
.show();
else
Toast.makeText(this, "no existe un artículo con el código ingresado",
Toast.LENGTH_SHORT).show();
}
public void listarRegistos(View v){
/** Inicia Activity con listado de registros
* de la tabla de SQLite
*/
Intent i=new Intent(this,ListaRegistros.class);
startActivity(i);
}
}
################
3) Crear clase auxiliar AdminSQLiteOpenHelper.java
3) Crear clase auxiliar AdminSQLiteOpenHelper.java
Clase de manejo de la BD
AdminSQLiteOpenHelper.java
################
################
AdminSQLiteOpenHelper.java
################
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {
public AdminSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table articulos(codigo int primary key,descripcion text,precio real)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
4) Crear emptyActivity activity_lista_registros.xml, ListaRegistros.java
SEGUNDO Activity, crear nuevo con nombre: ListaRegistros
activity_lista_registros.xml
################
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ListaRegistros">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Registros en BD"
android:textAlignment="center" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
##################
ListaRegistros.java
##################
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.Vector;
/**
* Clase que muestra un listado de los registros de la BD interna
*
* Autor: jjgarsal 2020
*
*/
public class ListaRegistros extends AppCompatActivity {
private ListView lv1;
private Vector datosRegistro;
/**
* Manipulación de clase Vector
* http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/colecciones/vector.htm
*/
private ArrayAdapter adaptador1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_registros);
datosRegistro=consultaBD();
adaptador1=new ArrayAdapter(this,android.R.layout.simple_list_item_1,datosRegistro);
lv1=(ListView)findViewById(R.id.listView1);
lv1.setAdapter(adaptador1);
lv1.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView arg0, View arg1, int i,
long arg3) {
/*
vectorArticulos[] se llena con los Campos del registro seleccionado en
el ListView, el registro se separa con el método split(" ") en cada uno
de los Campos del registro
*/
String vectorArticulos[] =datosRegistro.elementAt(i).toString().split(" ");
String idArticulo = vectorArticulos[0]; // Obtiene ID del String
ver(idArticulo);
}});
}
public void ver (String id) {
/**
* Llama a Activity con datos del registro
*/
// Intent i=new Intent(this,verDatosArticulo.class);
// i.putExtra("indiceRegistro", id);
// startActivity(i);
Toast.makeText(this, "Registro: "+id,
Toast.LENGTH_SHORT).show();
}
public Vector consultaBD(){
Vector v = new Vector();
AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,
"administracion", null, 1);
SQLiteDatabase bd = admin.getWritableDatabase();
Cursor fila = bd.rawQuery(
"select * from articulos", null);
if(fila.moveToFirst()){
do {
// Obtiene 2 primeros campos de la Tabla
String cadena = "";
cadena+=fila.getString(0)+" ";
cadena+=fila.getString(1);
v.add(cadena);
} while (fila.moveToNext());
bd.close();
} else {
Toast.makeText(this, "No hay registros",
Toast.LENGTH_SHORT).show();
}
return v;
}
}