Upload
archivo35
View
74
Download
1
Embed Size (px)
Citation preview
Tutorial Android + SQLite
http://notasprogramacion.sodenet.es/tutorial-android-sqlite/
Cómo instalar entorno de desarrollo android09/15/2012 12:41 ⋅ 3 Comentarios ⋅ pmon
Explicamos a continuación cómo instalar el entorno de desarrollo Android sobre Ubuntu
12.04 64-bit. No obstante, si tenéis que realizar la instalación sobre otro Sistema Operativo
basta con buscar en Google, hay una infinidad de recursos a un click de distancia. Inténtalo,
vale la pena!!
Adjunto imagen con detalles de mi equipo
Paso 1: Instalar Eclipse
Basta con abrir un Terminal e instalar desde apt-get:
sudo apt-get install eclipse
Paso 2: Abrir Eclipse y consultar versión instalada
Abrimos Eclipse y consultamos la versión del mismo desde Help > About Eclipse Platformy
veremos una pantalla como la que sigue en la cual se indica la versión de Eclipse. En
nuestro caso 3.7
Paso 3: Instalamos los paquetes de Software desde Eclipse
Vamos a Help > Install New Software …y allí indicamos la ruta desde la que instalaremos
los paquetes necesarios. En nuestro caso indicando la versión
3.7:https://dl.google.com/eclipse/plugin/3.7
Instalamos los paquetes Developer Tools, Google Plugin for Eclipse y SDKs
Cuando termine la instalación solicitará reiniciar eclipse.
Paso 4: Instalación automática de SDK Android
Tras el reinicio de eclipse aparecera el asistente de instalación del SDK, bastará con darle a
siguiente y finalizar la instalación.
Paso 5: Configuración de AVD
El último paso consite en configurar un dispositivo virtual Android que utilizaremos para
probar las aplicaciones sin necesidad de instalarlas en nuestro dispositivo. Para ello vamos
a Window > AVD Managery creamos los dispositivos que necesitemos tal y como se ve en la
imagen
Una vez completados todos los pasos ya tenemos listo el entorno de desarrollo para
comenzar nuestra aplicación ….
Hola Mundo Android12/01/2012 19:37 ⋅ 1 Comentario ⋅ pmon
Como no podía ser de otra forma, nuestro primer programa en Android será el típico y
archiconocido Hola Mundo.
Para ello comenzaremos por abrir nuestro IDE Eclipse para android que ya vimos como
instalar en el post anterior Instalar entorno de desarrollo Android.
Paso 1: Creamos el nuevo proyecto Android
Para quien todavía no esté familiarizado con las opciones básicas de eclipse: File – New –
Project y dentro de la carpeta Android seleccionamos Android Application Project y
pulsamos Siguiente.
Indicamos el nombre del proyecto y el resto de opciones por defecto.
Build SDK: versión del SDK con el que se va a compilar el proyecto.
Minimun Required SDK: versión mínima de Android en la que podrá ejecutarse la
aplicación.
Pulsamos Siguiente y aparece el asistente para crear la Activity principal. Una Activity es
cada una de las pantallas que forman nuestra aplicación.
Volvemos a pulsar Siguiente con las opciones por defecto y nos lleva a la pantalla desde la
que daremos nombre a la Activity.
Explico alguno de los campos que aparecen en esta pantalla ya que darán nombre a
distintas partes del código de nuestra aplicación.
Activity Name: Nombre que recibirá la clase .java correspondiente a la Activity.
Layout Name: Nombre del xml que define los elementos visuales de la Activity.
Title: El título que se le pondrá por defecto a la Pantalla.
Paso 2: Revisamos el código generado por el asistente
Al completar el asistente se ha creado un proyecto de ejemplo que incluye el texto Hello
World en pantalla así que lo aprovecharemos para visualizar las diferentes partes de código
del proyecto.
o src/com.example.holamundoandroid/Inicio.java: Es la clase Inicio, en ella
incluiremos el código relacionado con la activity. Por el momento no haremos nada
con él.
o res/layout/activity_inicio.xml: Es el fichero de layout que define la visualización
de la activity. Eclipse permite trabajar sobre esta pantalla en modo gráfico o
edición l xml.
12345678910
<xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_p
arent" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" tools:context=".Inicio" />
res/values/strings.xml: En este fichero se definen las etiquetas de texto que se van a
utilizar en la aplicación. En el podéis observar que se definen tanto las etiquetas de
nombre de la aplicación, la propia etiqueta hello world y el título de la activity Inicio.
o HolaMundoAndroid
o Hello world!
o Settings
o Inicio
Paso 3: Ejecutamos la aplicación en el AVD
Ya se explicó en la configuración del AVD en el Paso 5 de Instalación de entorno de
desarrollo Android así que si no lo tienes configurado vuelve a él.
Para ejecutarlo pulsamos sobre Run o Control + F11. Tras un tiempo de espera aparece el
emulador Android con nuestra aplicación.
Paso 4: Modificamos el código del proyecto a nuestro gusto
¿Cómo íbamos a terminar nuestro primer programa sin haber tirado ni una sola línea de
código? …. ¡¡¡Que no se diga!!! Ahora vamos a escribir un poco de código para terminar
nuestro Hola Mundo Android con un buen sabor de boca …
¿Y qué vamos a hacer?
Pondremos un campo para rellenar nuestro nombre y un botón que al pulsarlo muestre el
texto: Hola Mundo Android … saludos de xxxxxxxxxx
strings.xml: Añadimos los textos de los nuevos elementos
HolaMundoAndroid
Settings
Inicio
Introduce tu nombre
Saluda
activity_inicio.xml: Incluimos los nuevos controles
12345678910111213141516171819202122232425262728
<xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" ><EditTextandroid:id="@+id/nombre"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/boton_saludar"android:layout_alignBottom="@+id/boton_saludar"android:layout_alignParentLeft="true"android:hint="@string/hint_nombre" /> <Buttonandroid:id="@+id/boton_saludar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:text="@string/texto_boton_saludar"android:onClick="saludar"/>
<TextViewandroid:id="@+id/saludo"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true" />
Prestad especial atención a la propiedad android:onClick=”saludar” del botón. Esta
propiedad desencadenará la llamada al método saludar de la clase Inicio.class
Inicio.java: Añadimos el método saludar que se encargará de recoger el valor del nombre
y rellenar el saludo en el TextView de activity_inicio.xml
1234567
package com.example.holamundoandroid;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.EditText;import android.widget.TextView; public class Inicio extends Activity {
891011121314151617181920212223242526272829303132333435363738394041
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_inicio);}
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_inicio, menu);return true;}
public void saludar(View view){ // recuperamos los objetos de la visaEditText nombre = (EditText) findViewById(R.id.nombre);TextView saludo = (TextView) findViewById(R.id.saludo);
// construimos el saludoString mensaje = "Hola Mundo Android" ; // si el nombre no está vacío lo añadimosif (nombre.getText().length() > 0){mensaje += " ... saludos de " + nombre.getText().toString() ;}
// rellenamos el saludosaludo.setText(mensaje);}}
En el método saludar declaramos dos objetos de tipo nombre y saludo que obtenemos de la
vista mediante findViewById
Construimos después el saludo incluyendo en el texto del nombre si se ha rellenado.
Visualizamos el mensaje en el TextView.
El resultado aquí lo tenéis!!!
Puedes descargar la aplicación del ejemplo desde aquí HolaMundoAndroid.apk
Tutorial CRUD Android + SQLite (I): Crear la base de datos03/22/2013 20:15 ⋅ 2 Comentarios ⋅ pmon
Esta es la primera parte de tutorial en las que detallaremos paso a paso la creación de una
aplicación CRUD con Android + SQLite.
¿Qué es un CRUD Android + SQLite?
CRUD es el acrónimo de Create, Read, Update y Delete. Por tanto vamos a crear una
aplicación Android con las operaciones básicas para guardar y mantener información en
una base de datos SQLite:
Crear Registros
Obtener Registros
Actualizar Registros
Borrar Registros
La aplicación de ejemplo consistirá en una lista en la que introduciremos las condiciones
bancarias que nos han ofrecido en diferentes entidades para la solicitud de una hipoteca.
1: Nuevo Proyecto Android
No entramos en detalle para la creación de un nuevo proyecto Android. Si no tienes claro
cómo hacerlo puedes revisar la entrada anterior Hola Mundo Android.
2: Clase controladora de base de datos para SQLite
La creación, actualización y conexión de la base de datos se realiza desde la aplicación a
través de una clase que hereda de SqliteOpenHelper. Esta clase gestiona la creación de la
base de datos la primera vez que se accede a la misma con el método onCreate y la
actualización de la base de datos cuando se detecte un cambio de versión de la misma con
el método onUpdate. Hemos llamado a la clase HipotecaDbHelper.
En esta clase declaramos 3 propiedades que utilizaremos en el constructor de la misma:
12345678910111213141516171819202122232425262728
package com.sodenet.hipotecas; import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper; public class HipotecaDbHelper extends SQLiteOpenHelper { private static int version = 1; private static String name = "HipotecaDb" ; private static CursorFactory factory = null; public HipotecaDbHelper(Context context) { super(context, name, factory, version); }
@Override public void onCreate(SQLiteDatabase db) {
}
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}}
2930
3: Crear tabla en SQLite
Ahora que ya tenemos la clase controladora de la base de datos vamos implementar el
método onCreate con la creación de la tabla HIPOTECA que consta de los siguientes
campos:
_id: Identificador del registro. Es importante utilizar como identificador _id ya que los
cursores que utilizaremos para recuperar la información dan por hecho que el
identificador toma este nombre.
hip_nombre: Nombre del registro. Lo utilizaremos para incluir el nombre de la
hipoteca o entidad bancaria.
hip_condiciones: Condiciones bancarias de la hipoteca.
hip_contacto: Persona con la que estamos en contacto con la entidad bancaria
hip_email: E-mail de contacto.
hip_telefono: Teléfono de contacto.
hip_observaciones: Notas referentes a la hipoteca.
123456789101112131415161718192021222324
@Overridepublic void onCreate(SQLiteDatabase db){ Log.i(this.getClass().toString(), "Creando base de datos");
db.execSQL( "CREATE TABLE HIPOTECA(" + " _id INTEGER PRIMARY KEY," + " hip_nombre TEXT NOT NULL, " + " hip_condiciones TEXT, " + " hip_contacto TEXT," + " hip_email TEXT," + " hip_telefono TEXT," + " hip_observaciones TEXT)" ); db.execSQL( "CREATE UNIQUE INDEX hip_nombre ON HIPOTECA(hip_nombre
ASC)" ); Log.i(this.getClass().toString(), "Tabla HIPOTECA creada");
/* * Insertamos datos iniciales */ db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(1,'Santander')"); db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(2,'BBVA')"); db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(3,'La Caixa')");
252627282930313233
db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(4,'Cajamar')"); db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(5,'Bankia')"); db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(6,'Banco Sabadell')"); db.execSQL("INSERT INTO HIPOTECA(_id, hip_nombre) VALUES(7,'Banco Popular')");
Log.i(this.getClass().toString(), "Datos iniciales HIPOTECA insertados");
Log.i(this.getClass().toString(), "Base de datos creada");}
4: Abrir la base de datos SQLite desde la aplicación Android
Al iniciar nuestra aplicación abrimos la base de datos. La primera vez desencadena la
ejecución del método onCreate de nuestra clase HipotecaDbHelper. Para ello modificamos
el método onCreate de la clase de la actividad principal de la aplicación, Hipoteca.java
1234567891011121314
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hipoteca);
/* * Declaramos el controlador de la BBDD y accedemos en modo escritura */ HipotecaDbHelper dbHelper = new HipotecaDbHelper(getBaseContext()); SQLiteDatabase db = dbHelper.getWritableDatabase();
Toast.makeText(getBaseContext(), "Base de datos preparada", Toast.LENGTH_LONG).show();}
5: Ejecución de la aplicación
¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador teniendo en
cuenta que se mostrará un mensaje emergente cuando la base de datos esté preparada.
Además si revisamos el LogCat, la primera vez que se ejecute la aplicación veremos como
indica los pasos seguidos en la creación de la base de datos.
Tutorial CRUD Android + SQLite (II): Mostrar datos en ListView03/29/2013 15:37 ⋅ 6 Comentarios ⋅ pmon
En la entrada anterior vimos la definición y creación de la base de datos SQLite para la
aplicación CRUD de ejemplo que consistía en registrar las condiciones ofrecidas por las
entidades bancarias para la solicitud de una hipoteca. En la entrada actual trataremos la
visualización de los registros de la base de datos SQLite en un componente ListView.
1: HipotecaDbAdapter
Definimos la clase HipotecaDbAdapter para gestionar las operaciones de la entidad
HIPOTECA en la base de datos SQLite.
12345678910111213
package com.sodenet.hipotecas; import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase; public class HipotecaDbAdapter { /** * Definimos constante con el nombre de la tabla */ public static final String C_TABLA = "HIPOTECA" ; /**
1415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
* Definimos constantes con el nombre de las columnas de la tabla */ public static final String C_COLUMNA_ID = "_id"; public static final String C_COLUMNA_NOMBRE = "hip_nombre"; public static final String C_COLUMNA_CONDICIONES = "hip_condiciones"; public static final String C_COLUMNA_CONTACTO = "hip_contacto"; public static final String C_COLUMNA_EMAIL = "hip_email"; public static final String C_COLUMNA_TELEFONO = "hip_telefono"; public static final String C_COLUMNA_OBSERVACIONES = "hip_observaciones"; private Context contexto; private HipotecaDbHelper dbHelper; private SQLiteDatabase db; /** * Definimos lista de columnas de la tabla para utilizarla en las consultas a la base de datos */ private String[] columnas = new String[]{ C_COLUMNA_ID, C_COLUMNA_NOMBRE, C_COLUMNA_CONDICIONES, C_COLUMNA_CONTACTO, C_COLUMNA_EMAIL, C_COLUMNA_TELEFONO, C_COLUMNA_OBSERVACIONES} ;
public HipotecaDbAdapter(Context context) { this.contexto = context; }
public HipotecaDbAdapter abrir() throws SQLException { dbHelper = new HipotecaDbHelper(contexto); db = dbHelper.getWritableDatabase(); return this; }
public void cerrar() { dbHelper.close(); }
/** * Devuelve cursor con todos las columnas de la tabla */ public Cursor getCursor() throws SQLException { Cursor c = db.query( true, C_TABLA, columnas, null, null, null, null, null, null);
return c; }}
61
2: HipotecaCursorAdapter
Definimos la clase HipotecaCursorAdapter que utilizaremos desde la Activity Hipoteca para
alimentar el ListView con los datos obtenidos a traves de la clase HipotecaDbAdapter.
123456789101112131415
package com.sodenet.hipotecas; import android.content.Context;import android.database.Cursor;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CursorAdapter;import android.widget.TextView; public class HipotecaCursorAdapter extends CursorAdapter{
private HipotecaDbAdapter dbAdapter = null ; public HipotecaCursorAdapter(Context context, Cursor c) { super(context, c); dbAdapter = new HipotecaDbAdapter(context); dbAdapter.abrir(); }
@Override public void bindView(View view, Context context, Cursor cursor) {
16171819202122232425262728293031323334353637383
TextView tv = (TextView) view ;
tv.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_NOMBRE))); }
@Override public View newView(Context context, Cursor cursor, ViewGroup parent) { final LayoutInflater inflater = LayoutInflater.from(context); final View view = inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
return view; }}
9
3: Diseño Layout Activity Principal
En la entrada anterior creamos la Activity Hipoteca dejando el diseño de la misma en
blanco. Ahora vamos a editar el layout de esta Activity posicionando un ListView que
utilizaremos para mostrar los registros de la base de datos SQLite.
Editamos archivo res/layout/activity_hipoteca.xml dejándolo como sigue a continuación:
123456789101112131415161718
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Hipoteca" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
<TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/lista_vacia" /> </LinearLayout>
19Añadimos al archivo res/values/strings.xml la definición de string que utilizamos cuando
la lista está vacía.
1 <string name="lista_vacia">Sin Datos</string>
4: Enlazar ListActivity con la base de datos SQLite
Modificamos la Activity principal de la aplicación para que herede de ListActivity, ya que
simplificará el tratamiento de la lista en próximas modificaciones.
En el método onCreate obtenemos la referencia a la ListView incluida en el layout y
creamos y preparamos el adaptador dbAdapter para gestionar las operaciones sobre la
entidad HIPOTECA en la base de datos SQLite.
El método consultar() se encargará de vincular el CursorAdapter hipotecaAdapter a la
ListView lista.
1234567891011121314151617181920212223242526
package com.sodenet.hipotecas; import android.app.ListActivity;import android.database.Cursor;import android.os.Bundle;import android.view.Menu;import android.widget.ListView; public class Hipoteca extends ListActivity { private HipotecaDbAdapter dbAdapter; private Cursor cursor; private HipotecaCursorAdapter hipotecaAdapter ; private ListView lista; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hipoteca);
lista = (ListView) findViewById(android.R.id.list);
dbAdapter = new HipotecaDbAdapter(this); dbAdapter.abrir();
consultar(); }
private void consultar() {
2728293031323334353637383940414243
cursor = dbAdapter.getCursor(); startManagingCursor(cursor); hipotecaAdapter = new HipotecaCursorAdapter(this, cursor); lista.setAdapter(hipotecaAdapter); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hipoteca, menu); return true; }}
5: Ejecución de la aplicación
¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador.
Tutorial CRUD Android + SQLite (III): Mostrar datos en Formulario04/06/2013 18:29 ⋅ 2 Comentarios ⋅ pmon
En la entrada anterior vimos cómo mostrar en un listview registros de la base de datos
SQLitepara la aplicación CRUD de condiciones para la solicitud de una hipoteca. En la
entrada actual mostraremos los registros de forma individual en un formulario
profundizando en los siguientes conceptos:
Evento onListItemClick en ListView al seleccionar un registro
Navegar entre Actividades pasando datos con Intent putExtra
Consultar un registro de SQLite en Formulario
1: Diseño Layout Formulario
Creamos una nueva actividad HipotecaFormulario con diseño de formulario para mostrar los
datos de cada registro en la tabla HIPOTECA de SQLite.
Editamos archivo res/layout/activity_hipoteca_formulario.xml dejándolo como sigue a
continuación:
123456789
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".HipotecaFormulario" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"
1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
android:padding="10dp" > <TextView android:id="@+id/label_nombre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_nombre_hipoteca" android:textAppearance="?android:attr/
textAppearanceMedium" /> <EditText android:id="@+id/nombre" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/label_nombre" android:ems="10" /> <TextView android:id="@+id/label_condiciones" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_condiciones" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_below="@+id/nombre" android:layout_marginTop="20dp" /> <EditText android:id="@+id/condiciones" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/label_condiciones" android:ems="10" android:inputType="textMultiLine"> </EditText>
<TextView android:id="@+id/label_contacto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_contacto" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_below="@+id/condiciones" android:layout_marginTop="20dp" /> <EditText android:id="@+id/contacto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/label_contacto" android:ems="10">
57585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
</EditText>
<TextView android:id="@+id/label_telefono" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_telefono" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_below="@+id/contacto" android:layout_marginTop="20dp" /> <EditText android:id="@+id/telefono" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/label_telefono" android:ems="10" android:inputType="phone" > </EditText>
<TextView android:id="@+id/label_email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/telefono" android:layout_marginTop="20dp" android:text="@string/label_email" android:textAppearance="?android:attr/
textAppearanceMedium" /> <EditText android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/label_email" android:ems="10" android:inputType="textEmailAddress"/>
<TextView android:id="@+id/label_observaciones" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_observaciones" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_below="@+id/email" android:layout_marginTop="20dp" /> <EditText android:id="@+id/observaciones" android:layout_width="match_parent" android:layout_height="wrap_content"
102103104105106107108109110111112113114115116117118119120121122
android:layout_alignParentLeft="true" android:layout_below="@+id/label_observaciones" android:ems="10" android:inputType="textMultiLine"> </EditText>
</RelativeLayout></ScrollView>
Añadimos las etiquetas utilizadas en el formulario al archivo res/values/strings.xml
123
<string name="label_nombre_hipoteca">Nombre:</string><string name="label_condiciones">Condiciones:</string><string name="label_contacto">Contacto:</string><string name="label_telefono">Teléfono:</string>
456
<string name="label_email">E-Mail:</string><string name="label_observaciones">Observaciones:</string>
Diseño de layout_hipoteca_formulario.xml
2: Navegar a Activity Formulario desde la Activity principal
A continuación enlazamos la selección de cada uno de los registros de la lista de hipotecas
con el formulario.
Para ello utilizaremos el evento onListItemClick de la ListActivity Hipoteca, que llama al
método visualizar.Este método declara el Intent necesario para iniciar la nueva actividad.
En este Intent incluimos los parámetros modo de comportamiento e identificador del
registro seleccionado.
Hipoteca.java
123456789101112
package com.sodenet.hipotecas; import android.app.ListActivity;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.ListView; public class Hipoteca extends ListActivity { public static final String C_MODO = "modo" ; public static final int C_VISUALIZAR = 551 ;
1314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
private HipotecaDbAdapter dbAdapter; private Cursor cursor; private HipotecaCursorAdapter hipotecaAdapter ; private ListView lista; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hipoteca);
lista = (ListView) findViewById(android.R.id.list);
dbAdapter = new HipotecaDbAdapter(this); dbAdapter.abrir();
consultar(); }
private void consultar() { cursor = dbAdapter.getCursor(); startManagingCursor(cursor); hipotecaAdapter = new HipotecaCursorAdapter(this, cursor); lista.setAdapter(hipotecaAdapter); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hipoteca, menu); return true; }
private void visualizar(long id) { // Llamamos a la Actividad HipotecaFormulario indicando el modo visualización y el identificador del registro Intent i = new Intent(Hipoteca.this, HipotecaFormulario.class); i.putExtra(C_MODO, C_VISUALIZAR); i.putExtra(HipotecaDbAdapter.C_COLUMNA_ID, id);
startActivityForResult(i, C_VISUALIZAR); }
@Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id);
visualizar(id); }}
60616263646566
3: Consultar un Registro de SQLite
Desde la actividad Formulario recibiremos el identificador del registro que debe mostrarse,
para obtener el registro de la base de datos SQLite incluiremos el nuevo
método getRegistro en la clase HipotecaCursorAdapter.java.
12345678910111213141516171819202122232425262728293031
package com.sodenet.hipotecas; import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase; public class HipotecaDbAdapter { /** * Definimos constante con el nombre de la tabla */ public static final String C_TABLA = "HIPOTECA" ; /** * Definimos constantes con el nombre de las columnas de la tabla */ public static final String C_COLUMNA_ID = "_id"; public static final String C_COLUMNA_NOMBRE = "hip_nombre"; public static final String C_COLUMNA_CONDICIONES = "hip_condiciones"; public static final String C_COLUMNA_CONTACTO = "hip_contacto"; public static final String C_COLUMNA_EMAIL = "hip_email"; public static final String C_COLUMNA_TELEFONO = "hip_telefono"; public static final String C_COLUMNA_OBSERVACIONES = "hip_observaciones"; private Context contexto; private HipotecaDbHelper dbHelper; private SQLiteDatabase db; /** * Definimos lista de columnas de la tabla para utilizarla en las consultas a la base de datos */ private String[] columnas = new String[]{ C_COLUMNA_ID, C_COLUMNA_NOMBRE, C_COLUMNA_CONDICIONES, C_COLUMNA_CONTACTO, C_COLUMNA_EMAIL, C_COLUMNA_TELEFONO, C_COLUMNA_OBSERVACIONES} ;
public HipotecaDbAdapter(Context context)
3233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
{ this.contexto = context; }
public HipotecaDbAdapter abrir() throws SQLException { dbHelper = new HipotecaDbHelper(contexto); db = dbHelper.getWritableDatabase(); return this; }
public void cerrar() { dbHelper.close(); }
/** * Devuelve cursor con todos los registros y columnas de la tabla */ public Cursor getCursor() throws SQLException { Cursor c = db.query( true, C_TABLA, columnas, null, null, null, null, null, null);
return c; }
/** * Devuelve cursor con todos las columnas del registro */ public Cursor getRegistro(long id) throws SQLException { Cursor c = db.query( true, C_TABLA, columnas, C_COLUMNA_ID + "=" + id, null, null, null, null, null); //Nos movemos al primer registro de la consulta if (c != null) { c.moveToFirst(); } return c; }}
4: Mostrar registro en Activity Formulario
Una vez tenemos preparado el acceso desde la actividad principal al formulario y el
adaptador para obtener el registro de la base de datos SQLite, modificamos la clase del
formularioHipotecaFormulario.java como se detalla a continuación:
El método onCreate obtiene los datos que hemos pasado desde la Actividad principal
Preparamos el adaptador de base de datos que utilizaremos para consultar el registro
Obtenemos el registro de la base de datos y rellenamos los campos del formulario
Como hemos llamado al formulario en modo Visualización, desactivamos la edición de
los campos
12345678910111213141516171819202122232425262728293031323334
package com.sodenet.hipotecas; import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.widget.EditText; public class HipotecaFormulario extends Activity { private HipotecaDbAdapter dbAdapter; private Cursor cursor; // // Modo del formulario // private int modo ; // // Identificador del registro que se edita cuando la opción es MODIFICAR // private long id ; // // Elementos de la vista // private EditText nombre; private EditText condiciones; private EditText contacto; private EditText telefono; private EditText email; private EditText observaciones; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hipoteca_formulario);
Intent intent = getIntent(); Bundle extra = intent.getExtras();
3536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
if (extra == null) return; // // Obtenemos los elementos de la vista // nombre = (EditText) findViewById(R.id.nombre); condiciones = (EditText) findViewById(R.id.condiciones); contacto = (EditText) findViewById(R.id.contacto); telefono = (EditText) findViewById(R.id.telefono); email = (EditText) findViewById(R.id.email); observaciones = (EditText) findViewById(R.id.observaciones);
// // Creamos el adaptador // dbAdapter = new HipotecaDbAdapter(this); dbAdapter.abrir();
// // Obtenemos el identificador del registro si viene indicado // if (extra.containsKey(HipotecaDbAdapter.C_COLUMNA_ID)) { id = extra.getLong(HipotecaDbAdapter.C_COLUMNA_ID); consultar(id); }
// // Establecemos el modo del formulario // establecerModo(extra.getInt(Hipoteca.C_MODO));
}
private void establecerModo(int m) { this.modo = m ;
if (modo == Hipoteca.C_VISUALIZAR) { this.setTitle(nombre.getText().toString()); this.setEdicion(false); } }
private void consultar(long id) { // // Consultamos el centro por el identificador // cursor = dbAdapter.getRegistro(id);
nombre.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_NOMBRE))); condiciones.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_CONDI
828384858687888990919293949596979899100101102103104105106107108109110111
CIONES))); contacto.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_CONTACTO))); telefono.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_TELEFONO))); email.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_EMAIL))); observaciones.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_OBSERVACIONES))); }
private void setEdicion(boolean opcion) { nombre.setEnabled(opcion); condiciones.setEnabled(opcion); contacto.setEnabled(opcion); telefono.setEnabled(opcion); email.setEnabled(opcion); observaciones.setEnabled(opcion); }}
5: Ejecución de la aplicación
Por el momento no tenemos posibilidad de editar los registros de nuestra tabla Hipotecas y
todos los registros creados por defecto tienen únicamente el identificador y el nombre. Por
tanto, para mostrar una información más completa en el formulario vamos a ampliar el
contenido de registro con identificador 1.
Esto lo haremos desde el archivo HipotecaDbHelper.java. Modificamos la versión de la
base de datos de 1 a 2 y en el método onUpgrade hacemos un UPDATE rellenando la
información. Entraremos en detalle sobre esta cuestión en entradas posteriores.
123456789101112
@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ if (newVersion == 2) { db.execSQL("UPDATE HIPOTECA SET hip_contacto = 'Julián Gómez Martínez'," + " hip_email = '[email protected]'," + " hip_observaciones = 'Tiene toda la documentación y está estudiando la solicitud. En breve llamará para
informar de las condiciones'" + " WHERE _id = 1"); }
}
¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador.
Tutorial CRUD Android + SQLite (IV): Insertar datos desde Formulario04/16/2013 21:24 ⋅ 2 Comentarios ⋅ pmon
En la entrada anterior vimos cómo mostrar registros de la base de datos SQLite en un
formulario, en esta nos centraremos en cómo insertar registros en una base de datos
SQLite desde un formulario.
Para ello veremos los siguientes conceptos:
Definir el menú de la actividad para navegar al formulario en modo Inserción
Insertar registros en la base de datos SQLite
Devolver un resultado desde el Formulario a la actividad principal
Refrescar el ListView para mostrar el nuevo registro insertado
1: Personalizar Menú Actividad
Editamos el menú de la actividad res/menu/hipoteca.xml para incluir la opción para crear
nuevo registro.
1234567
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_crear" android:title="@string/menu_crear" /> </menu>
Incluimos la nueva cadena en el fichero res/values/strings.xml.
1 <string name="menu_crear">Nuevo</string>
Añadimos una nueva propiedad estática a la clase Hipoteca.java que utilizaremos después
para indicar la acción a realizar por el formulario.
123456789
public class Hipoteca extends ListActivity { public static final String C_MODO = "modo" ; public static final int C_VISUALIZAR = 551 ; public static final int C_CREAR = 552 ; ... ... ...
Definimos el método onMenuItemSelected de Hipoteca.java para realizar la llamada a
la actividad formulario. La llamada se realiza con el
método startActivityForResult porque de esa forma nos permitirá conocer el resultado de
la operación realizada desde la actividad llamada.
123456789101112131415
@Overridepublic boolean onMenuItemSelected(int featureId, MenuItem item){ Intent i;
switch (item.getItemId()) { case R.id.menu_crear: i = new Intent(Hipoteca.this, HipotecaFormulario.class); i.putExtra(C_MODO, C_CREAR); startActivityForResult(i, C_CREAR); return true; } return super.onMenuItemSelected(featureId, item);}
2: Insertar registro en SQLite desde Formulario
Comenzamos añadiendo a la clase HipotecaDbAdapter.java el método que utilizaremos
para insertar los datos que enviaremos desde el formulario.
12345678910
/** * Inserta los valores en un registro de la tabla */public long insert(ContentValues reg){ if (db == null) abrir();
return db.insert(C_TABLA, null, reg);}
Modificamos el diseño del formulario res/layout/activity_hipoteca_formulario.xml para
incluir al final una botonera para Guardar y Cancelar.
1234
<LinearLayout android:id="@+id/botonera" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/observaciones"
5678910111213141516171819202122
android:gravity="center" android:layout_marginTop="20dp" android:orientation="horizontal" > <Button android:id="@+id/boton_cancelar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/boton_cancelar" /> <Button android:id="@+id/boton_guardar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/boton_guardar" /> </LinearLayout>
Añadimos a la clase Hipoteca.java para añadir las siguientes funcionalidades:
Definimos los eventos onClick de los botones
Mostramos u Ocultamos la botonera según la acción que estamos realizando
Definimos el método guardar que recoge los valores del formulario y llama al
Adaptador de la tabla de base de datos
Finalizamos la ejecución del formulario devolviendo el control a la actividad principal
123456789101112131415161718192021
package com.sodenet.hipotecas; import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class HipotecaFormulario extends Activity { private HipotecaDbAdapter dbAdapter; private Cursor cursor; // // Modo del formulario // private int modo ; // // Identificador del registro que se edita cuando la opción es MODIFICAR //
2223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
private long id ; // // Elementos de la vista // private EditText nombre; private EditText condiciones; private EditText contacto; private EditText telefono; private EditText email; private EditText observaciones; private Button boton_guardar; private Button boton_cancelar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hipoteca_formulario);
Intent intent = getIntent(); Bundle extra = intent.getExtras();
if (extra == null) return; // // Obtenemos los elementos de la vista // nombre = (EditText) findViewById(R.id.nombre); condiciones = (EditText) findViewById(R.id.condiciones); contacto = (EditText) findViewById(R.id.contacto); telefono = (EditText) findViewById(R.id.telefono); email = (EditText) findViewById(R.id.email); observaciones = (EditText) findViewById(R.id.observaciones);
boton_guardar = (Button) findViewById(R.id.boton_guardar); boton_cancelar = (Button) findViewById(R.id.boton_cancelar);
// // Creamos el adaptador // dbAdapter = new HipotecaDbAdapter(this); dbAdapter.abrir();
// // Obtenemos el identificador del registro si viene indicado // if (extra.containsKey(HipotecaDbAdapter.C_COLUMNA_ID)) { id = extra.getLong(HipotecaDbAdapter.C_COLUMNA_ID); consultar(id); }
//
69707172737475767778798081828384858687888990919293949596979899100101102103104105106107
// Establecemos el modo del formulario // establecerModo(extra.getInt(Hipoteca.C_MODO));
// // Definimos las acciones para los dos botones // boton_guardar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { guardar(); } });
boton_cancelar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cancelar(); } });
}
private void establecerModo(int m) { this.modo = m ;
if (modo == Hipoteca.C_VISUALIZAR) { this.setTitle(nombre.getText().toString()); this.setEdicion(false); } else if (modo == Hipoteca.C_CREAR) { this.setTitle(R.string.hipoteca_crear_titulo); this.setEdicion(true); }
}
private void consultar(long id) { // // Consultamos el centro por el identificador // cursor = dbAdapter.getRegistro(id);
nombre.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_NOMBRE))); condiciones.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_CONDICIONES)));
10810911011111211311411511611711811912012112212312412512612712812913013
contacto.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_CONTACTO))); telefono.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_TELEFONO))); email.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_EMAIL))); observaciones.setText(cursor.getString(cursor.getColumnIndex(HipotecaDbAdapter.C_COLUMNA_OBSERVACIONES))); }
private void setEdicion(boolean opcion) { nombre.setEnabled(opcion); condiciones.setEnabled(opcion); contacto.setEnabled(opcion); telefono.setEnabled(opcion); email.setEnabled(opcion); observaciones.setEnabled(opcion); }
private void guardar() { // // Obtenemos los datos del formulario // ContentValues reg = new ContentValues(); reg.put(HipotecaDbAdapter.C_COLUMNA_NOMBRE, nombre.getText().toString()); reg.put(HipotecaDbAdapter.C_COLUMNA_CONDICIONES, condiciones.getText().toString()); reg.put(HipotecaDbAdapter.C_COLUMNA_CONTACTO, contacto.getText().toString()); reg.put(HipotecaDbAdapter.C_COLUMNA_TELEFONO, telefono.getText().toString()); reg.put(HipotecaDbAdapter.C_COLUMNA_EMAIL, email.getText().toString()); reg.put(HipotecaDbAdapter.C_COLUMNA_OBSERVACIONES, observaciones.getText().toString());
if (modo == Hipoteca.C_CREAR) { dbAdapter.insert(reg); Toast.makeText(HipotecaFormulario.this, R.string.hipoteca_crear_confirmacion, Toast.LENGTH_SHORT).show(); }
// // Devolvemos el control // setResult(RESULT_OK); finish(); }
private void cancelar() { setResult(RESULT_CANCELED, null); finish(); }}
1132133134135136137138139140141142143144145146147148149150151152153154
15515615715815916016116216316416516616716816917017117217317417517617717
8179180181Desde el método guardar se lanza un mensaje informativo que debemos registrar
enres/values/strings.xml. También definimos el texto que se mostrará en el formulario en
modo creación.
12
<string name="hipoteca_crear_titulo">Nueva Hipoteca</string><string name="hipoteca_crear_confirmacion">Hipoteca creada</string>
3: Capturar el ActivityResult en la actividad principal
Tanto si se guarda el registro desde el formulario o se cancela la inserción se devolverá el
control a la actividad principal con setResult. Para ello, definimos en Hipoteca.java el
métodoonActivityResult.
12345678910111213141516
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){ // // Nos aseguramos que es la petición que hemos realizado // switch(requestCode) { case C_CREAR: if (resultCode == RESULT_OK) consultar();
default: super.onActivityResult(requestCode, resultCode, data); }}
4: Ejecución de la aplicación
¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador.
Tutorial CRUD Android + SQLite (V): Eliminar registros desde formulario04/28/2013 12:35 ⋅ 3 Comentarios ⋅ pmon
En la entrada anterior vimos cómo insertar registros de la base de datos SQLite desde un
formulario, en esta nos centraremos en cómo eliminar registros en una base de datos
SQLite desde un formulario.
Para ello veremos los siguientes conceptos:
Cargar el menú indicado para la acción del formulario
Eliminar registros en la base de datos SQLite
Devolver un resultado desde el formulario a la actividad principal
Refrescar el ListView para ocultar el registro eliminado
1: Definir varios menús para una actividad
Puesto que la actividad formulario puede lanzarse para visualizar o borrar registros las
opciones del menú deben ser diferentes. Por ello definiremos dos menús y cargaremos
enonPrepareOptionsMenu el que corresponda.
El menú el formulario en modo visualización lo definiremos
enres/menu/hipoteca_formulario_ver.xml y tendrá la opción eliminar mientras que el
menú para el modo inserción lo
llamaremos res/menu/hipoteca_formulario_editar.xml y tendrá las opciones guardar y
cancelar. Lo llamamos editar porque reutilizaremos el menú para añadir nuevas opciones
en próximos entradas.
res/menu/hipoteca_formulario_ver.xml
1234567
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_eliminar" android:title="@string/menu_eliminar" /> </menu>
src/Hipoteca.java
res/menu/hipoteca_formulario_editar.xml
12345
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_guardar" android:title="@string/menu_guardar" />
67891011
<item android:id="@+id/menu_cancelar" android:title="@string/menu_cancelar" /> </menu>
Incluimos las nuevas cadenas en el fichero res/values/strings.xml.
src/Hipoteca.java
123
<string name="menu_guardar">Guardar</string><string name="menu_cancelar">Cancelar</string><string name="menu_eliminar">Eliminar</string>
2: Cargar menú en el método onPrepareOptionsMenu
Como indicabamos antes, dependiendo de la acción del formulario cargaremos el menú
correspondiente en el método onPrepareOptionsMenu. Para ello
modificamossrc/HipotecaFormulario.java añadiendo lo que sigue a continuación.
123456789101112131415161
...
... @Override public boolean onCreateOptionsMenu(Menu menu) { menu.clear();
if (modo == Hipoteca.C_VISUALIZAR) getMenuInflater().inflate(R.menu.hipoteca_formulario_ver, menu);
else getMenuInflater().inflate(R.menu.hipoteca_formulario_editar, menu);
return true; }......
7
3: Definir acciones del menú en el método onMenuItemSelected
En el método onMenuItemSelected capturaremos la opción pulsada del menú y
realizaremos la acción que corresponda en cada caso, entre ellas la nueva acción borrar.
Para ello modificamossrc/HipotecaFormulario.java añadiendo lo que sigue a
continuación.
12345678910111213141516171819202122232425262728293031323334
...
... @Override public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) { case R.id.menu_eliminar: borrar(id); return true; case R.id.menu_cancelar: cancelar(); return true; case R.id.menu_guardar: guardar(); return true; }
return super.onMenuItemSelected(featureId, item); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) { case R.id.menu_eliminar: borrar(id); return true; case R.id.menu_cancelar: cancelar(); return true; case R.id.menu_guardar: guardar(); return true;
35363738394041424344
}
return super.onMenuItemSelected(featureId, item); }......
4: Eliminar registro con mensaje de confirmación
La eliminación del registro la haremos solicitando previamente una confirmación por parte
del usuario con un AlertDialog. Para ello
modificamos src/HipotecaFormulario.java añadiendo lo que sigue a continuación.
1234567891011121314151617181920212223242526
...
... private void borrar(final long id) { /** * Borramos el registro con confirmación */ AlertDialog.Builder dialogEliminar = new AlertDialog.Builder(this); dialogEliminar.setIcon(android.R.drawable.ic_dialog_alert); dialogEliminar.setTitle(getResources().getString(R.string.hipoteca_eliminar_titulo)); dialogEliminar.setMessage(getResources().getString(R.string.hipoteca_eliminar_mensaje)); dialogEliminar.setCancelable(false);
dialogEliminar.setPositiveButton(getResources().getString(android.R.string.ok), newDialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int boton) { dbAdapter.delete(id); Toast.makeText(HipotecaFormulario.this, R.string.hipoteca_eliminar_confirmacion, Toast.LENGTH_SHORT).show(); /** * Devolvemos el control */ setResult(RESULT_OK); finish(); } });
dialogEliminar.setNegativeButton(android.R.string.no, null);
2728293031323334
dialogEliminar.show();
}......
Incluimos las nuevas cadenas en el fichero res/values/strings.xml.
123
<string name="hipoteca_eliminar_titulo">Eliminar Hipoteca</string><string name="hipoteca_eliminar_mensaje">¿Seguro que desea eliminar la Hipoteca?</string><string name="hipoteca_eliminar_confirmacion">Hipoteca eliminada</string>
Ahora solamente nos falta incluir el método delete en la
clase src/HipotecaDbAdapter.java
1234567891011121314
...
... /** * Eliminar el registro con el identificador indicado */ public long delete(long id) { if (db == null) abrir();
return db.delete(C_TABLA, "_id=" + id, null); }......
5: Refrescar el ListView de la actividad principal
Como hemos visto anteriormente, al borrar el registro se devuelve el control a la actividad
principal con el método setResult. Modificaremos el método onActivityResult de la
actividadsrc/Hipoteca.java para refrescar la información de la lista cuando volvamos del
formulario en modo Visualización.
12345
...
... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
6789101112131415161718192021222324
// // Nos aseguramos que es la petición que hemos realizado // switch(requestCode) { case C_CREAR: if (resultCode == RESULT_OK) consultar();
case C_VISUALIZAR: if (resultCode == RESULT_OK) consultar();
default: super.onActivityResult(requestCode, resultCode, data); } }......
6: Ejecución de la aplicación
¡Ya está todo listo! Ahora basta con ejecutar la aplicación en el emulador.