Por último nos queda la Actividad, es decir la pantalla que se va a mostrar y donde podremos interactuar con la aplicación.
Aqui crearemos el adaptador, cargaremos los valores en la lista, creamos el registro y lo borramos, siempre cuando se pulse el botón, es decir en el evento onClick.
Descarga sqlitePrimeroActivity desde:
Clase sqlitePrimeroActivity
Hasta aquí de momento el primer tutorial de SQLite.
Se que me quedan unas cositas pendientes, como enseñaros a visualizar los registros de una tabla o a eliminar la tabla. Si puedo haré un videotutorial de todo eso.
También nos queda añadir unos cuadros de texto donde poder introducir los registros de forma dinámica (y no siempre los mismos datos).
Pero de momento esto es lo que hay. Además nadie ha descargado todavía ninguna parte de este tutorial así que no hay prisa.
Saludos.
miércoles, 29 de agosto de 2012
8. Crear base de datos con SQLite (IV)
Adjunto el fichero main.xml que es la pantalla donde podemos visualizar los datos y añadirlos. Como he explicado en otra parte de este tutorial, de momento, solo añadiremos datos fijos.
Esta pantalla está formada por dos botones y un ListView.
Puedes descargar la clase de este enlace:
main.xml
Esta pantalla está formada por dos botones y un ListView.
Puedes descargar la clase de este enlace:
main.xml
7. Crear base de datos con SQLite (III)
La siguiente clase es DBAdapter, esta clase la utilizaremos para realizar las consultas y crear y editar cada uno de los campos de la tabla que manejará la aplicación.
Toda la clase está comentada, si quieres bajarla pulsa en el enlace siguiente:
Clase DBAdapter
Un saludo.
Toda la clase está comentada, si quieres bajarla pulsa en el enlace siguiente:
Clase DBAdapter
Un saludo.
domingo, 26 de agosto de 2012
6. Crear base de datos con SQLite (II)
La segunda clase que vamos a crear es DatosAgenda, en ella proporcionaremos los métodos adecuados para poder acceder a los campos de la tabla y devolver los valores que se van a mostrar.
Os dejo el enlace para que la descargueis directamente de aquí.
DatosAgenda
Saludos.
Os dejo el enlace para que la descargueis directamente de aquí.
DatosAgenda
Saludos.
sábado, 25 de agosto de 2012
5. Crear base de datos con SQLite (I)
Con esta aplicación voy a explicar como crear una base de datos con SQLite que nos permita añadir registros a una tabla.
En principio los registros van a tener los mismos datos luego iremos añadiendo más funcionalidades. El aspecto de la aplicación final será más o menos este. (imagen)
Voy a dividir el tutorial en varias partes cada una contendrá una clase de las que vamos a necesitar.
Tal vez me anime o me animeis a hacer un video tutorial de este proyecto si os parece más conveniente.
Primero deberemos crear un proyecto nuevo, si has seguido todos los tutoriales anteriores ya sabrás como hacerlo. Yo le he llamado sqlite.android.primero
Luego vamos a a crear la clase SQLiteAyudante que nos va a ayudar a definir la estructura de la base de datos, el código explicado es el siguiente:
Podeis descargarlo de aquí:
Nos vemos...
Saludos.
En principio los registros van a tener los mismos datos luego iremos añadiendo más funcionalidades. El aspecto de la aplicación final será más o menos este. (imagen)
Voy a dividir el tutorial en varias partes cada una contendrá una clase de las que vamos a necesitar.
Tal vez me anime o me animeis a hacer un video tutorial de este proyecto si os parece más conveniente.
Primero deberemos crear un proyecto nuevo, si has seguido todos los tutoriales anteriores ya sabrás como hacerlo. Yo le he llamado sqlite.android.primero
Luego vamos a a crear la clase SQLiteAyudante que nos va a ayudar a definir la estructura de la base de datos, el código explicado es el siguiente:
Podeis descargarlo de aquí:
package sqlite.android.primero;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class SQLiteAyudante extends SQLiteOpenHelper
// definimos el nombre de la tabla
public static final String TABLA_AGENDA ="miagenda1";
// definimos también como constantes el nombre de los campos
public static final String CAMPO_ID="_id";
public static final String CAMPO_NOMBRE ="nombre";
public static final String CAMPO_APELLIDOS="apellidos";
public static final String CAMPO_TELEFONO="telefono";
public static final String CAMPO_EMAIL="email";
// definimos el nombre de la base de datos y la version
private static final String BASEDEDATOS="miagenda.db";
private static final int VERSION_BASEDEDATOS=1;
// sentencia SQL para crear la tabla
private static final String CREAR_BASEDEDATOS="create table " +
TABLA_AGENDA + "(" + CAMPO_ID + " integer primary key autoincrement, "
+ CAMPO_NOMBRE + " text not null, " + CAMPO_APELLIDOS + " text, "+
CAMPO_TELEFONO + " text not null, " + CAMPO_EMAIL + " text);";
// Constructor que llama a la superclase para crear la base de datos
public SQLiteAyudante(Context context) {
super(context, BASEDEDATOS, null, VERSION_BASEDEDATOS);
}
@Override
public void onCreate(SQLiteDatabase db) {
// este método será llamado automáticamente cundo se cree la BD
// aquí crearemos las tablas que necesitemos y podríamos incluso añadir
// registros. Utilizaremos el método execSQL que ejecuta el código SQL
db.execSQL(CREAR_BASEDEDATOS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Este método se ejecuta cuando sea necesaria una actualización de la
// base de datos cuando intentemos abrir una version de la Base de Datos
// que todavía no existe.
// Un ejemplo de actualización sería para incluir nuevos campos.
Log.w(SQLiteAyudante.class.getName(), "Actualizando base de datos "+
BASEDEDATOS + " de la versión "+ oldVersion + " a la " +
newVersion + " todos los datos serán eliminados ");
db.execSQL("DROP TABLE IF EXIST " + TABLA_AGENDA);
// y volvermos a crearla
onCreate(db);
}
}
La siguiente clase definirá las propiedades y métodos necesarios para los campos de la tabla.Nos vemos...
Saludos.
martes, 19 de junio de 2012
4. Videotutorial Android nº 2. Evento OnClick.
Un sencillo videotutorial, en el que se explica como realizar un sencillo programa que sume dos números.
Aquí dejo el enlace:
Descarga Videotutorial nº 2
Aquí dejo el enlace:
Descarga Videotutorial nº 2
jueves, 15 de marzo de 2012
3. Videotutorial Android nº 1. Creación de una Interfaz
Un sencillo videotutorial, que podrás realizar paso a paso si has instalado los componentes necesarios que se han explicado en la primera entrada del Blog.
Simplemente para manejarse con las unidades e insertar controles.
Aquí dejo el enlace:
Descarga Videotutorial nº 1
Simplemente para manejarse con las unidades e insertar controles.
Aquí dejo el enlace:
Descarga Videotutorial nº 1
sábado, 10 de marzo de 2012
2. Resumen elementos de una aplicación Android
Resumen de elementos de una aplicación Android
AndroidManifest.xml
Contiene una información esencial que el sistema debe tener antes de ejecutar la aplicación.
· Nombre del paquete java
· Descripción de los componentes de la aplicación
· Permisos
· Versión mínima del api de Android que necesita
· Dependencias de otras librerías
Este archivo está presente en todas las aplicaciones Android. Su contenido especifica todos los componentes de la aplicación y la configuración global de la misma. Es el que describe la aplicación o descriptor.
Un plugin de Android para eclipse nos permite una edición sencilla de nuestro manifiesto.
Resumen de elementos de una aplicación
src
Carpeta con el código fuente de la aplicación
assets
Colección arbitraria de carpetas y ficheros
res
Contiene los recursos de la aplicación: imágenes, iconos, menús, animaciones, etc.
android.jar
Archivo jar que empaqueta las librerías Android para la plataforma correspondiente.
default.properties.xml
Fichero que especifica las propiedades que serán usadas por el sistema de compilación.
gen
Carpeta con los .java generados automáticamente por las herramientas de Android.
Clase Activity
Por analogía es una ventana de Windows (pero solo una) o un proceso del sistema operativo con una componente gráfica. Puede estar activa o en segundo plano.
Es una clase en nuestra aplicación que hereda de la clase Activity y es la encargada de crear una ventana que muestra la interfaz de usuario. Una aplicación puede tener una interfaz de usuario o no, si tiene una, deberá tener al menos un objeto Activity.
Es decir que cuando ejecutamos una aplicación lo primero que se muestra es la ventana (Activity) que está definida en AndroidManifest.xml como principal.
Una aplicación puede tener varias actividades, pero solo una es la principal, por ejemplo:
1. Actividad 0: Mostrar la lista de las imágenes
2. Actividad 1: Al pinchar en una se muestra
3. Actividad 2: Detalles de la imagen
Las actividades se gestionan como una pila, es decir, que una actividad puede llamar a otra y una vez que esta se finaliza vuelve a la actividad anterior. Cuando esto sucede la actividad que se estaba ejecutándose se pone en pausa.
Una actividad puede estar:
Ejecutándose . cuando está visible
En pausa . Cuando está visible pero en otra ventana, transparente o que no ocupa toda la pantalla.
Detenida . Cuando no es visible
Para pasar de un elemento Activity a otro se utiliza el método start Activity() o startActivityForResult().
Una de las principales tareas de Activity es mostrar elementos de la interfaz de usuario que se implementan con View y que se describen en archivos XML.
Cuando una actividad se abre, la anterior se pone en pausa y solo se ejecutará de nuevo cuando se requiera
Eventos que se disparan en los estados de la actividad.
onCreate . Cuando se crea una actividad se llama al evento onCreate(). Este evento solo se invoca la primera vez que se llama una actividad o cuando se ha tenido que eliminar por falta de recursos. Después de este siempre se ejecuta el onStart().
onStart . Es el evento invocado cuando la actividad se muestra al usuario, la primera vez que se muestra y cuando vuelve a aparecer tras haber estado oculta. Cuando se oculta se invoca a onStop() y justo antes de reaparecer a onResume().
onFreeze() y onPause() . Son llamadas secuencialmente cuando otra actividad va a encargarse de la interacción con el usuario. Tras onPause la actividad permanece en estado de espera y puede ocurrir que sea destruida, por lo que utilizamos estos eventos para consolidar la información que no queremos que se pierda. Si la actividad no se destruye, vuelve al primer plano con el evento onResume().
onRestart() . Se llama cuando se reinicia una actividad que estaba parada.
onDestroy() . Es llamado justo antes de que muera la actividad. Se puede forzar por el método finish().
Yo entiendo el esquema de esta manera:
1. Se crea la actividad (onCreate). Por ejemplo abrimos un navegador.
2. Se llama a onStart justo antes de que se muestra la ventana del navegador al usuario.
3. onResume . Es el último punto antes de que la aplicación esté en primer plano.
4. onPause() . Es llamada cuando vamos a empezar otra actividad. Hay que parar todo lo que se está haciendo en ese momento, pues hasta que finalice este método no empezará la nueva actividad. Después de esto pueden pasar tres cosas,
a. onResume . La actividad vuelve a primer plano y continúa el ciclo.
b. onStop . Se hace invisible, hay otra actividad en primer plano.
c. Que el sistema mate la aplicación por falta de recursos.
5. onStop() .Se llama cuando la actividad no es visible para el usuario y pueden pasar dos cosas
a. Que el sistema la mate
b. Que se reinicie. Antes de que se reinicie viene onRestart()
6. onDestroy() . Es llamado antes de que muera la actividad.
Intent
Es cuando un componente llama a otro. Está controlado por el sistema que está en el medio, por eso un intento, que el sistema decidirá por quien va a ser procesado..
Los intent son la manera de invocar las Activities que son básicamente pantallas. Un intent es la descripción abstracta de una operación que se va a llevar a cabo.
Un intent es una clase que permite especificar una Activity a ejecutar, llamando a uno de los métodos de Activity con un intent como parámetro.
Hay dos formas de llamar a una Activity a través de un Intent: Explícitamente e implícitamente.
Explícitamente: Es cuando creamos el Intent indicando el nombre de la clase de la actividad y el paquete. Luego llamamos a startActivity(). El sistema busca la clase y crea la instancia pasando los datos que hayamos podido añadir al Intent.
Ejemplo:
Intent i = new Intent(this, ClaseActividad1.class);
ClaseActividad1.class es la clase de la actividad que queremos iniciar.
Implícitamente: Cuando no indicamos el nombre de la clase de la actividad a invocar. Se especifican unos criterios y se deja al sistema que elija una actividad que los cumpla.
Intent i = new Intent(Intent.ACTION_PICK, Uri.parse(“content://contacts/people”));
startActivity (i);
El objeto Intent se evalúa y se pasa al controlador más adecuado.
El componente de datos de un Intent se expresa como URI y puede ser cualquier información como un contacto, una dirección web, la referencia a un clip multimedia, etc.
IntentFilter
Los IntentFilter suelen definirse en el archivo AndroidManifest.xml de la aplicación con la etiqueta <intent-filter>.
Activan los componentes de las aplicaciones. Su implementación es un objeto que describe la acción deseada.
En el manifiesto un componente indica a que tipo de Intents es capaz de responder.
Ejemplo de acciones
Acción | Descripción | Comp. |
ANSWER | Responde a una llamada de teléfono | Actividad |
VIEW | Muestra los datos al usuario de un proveedor de contenidos | Actividad |
EDIT | Proporciona acceso de edición a los datos | Actividad |
PICK | Elegir un ítem de un conjunto de datos | Actividad |
WEB_SEARCH | Realiza una búsqueda | Actividad |
POWER_CONNECTED | Conexión de la alimentación | B.Receiver |
REBOOT | Reinicio del dispositivo | B. Receiver |
DEVICE_STORAGE_LOW | Escasez de memoria en el sistema | B. Receiver |
GTALK_SERVICE_CON NECTED | Se ha establecido una conexión Gtalk | B. Receiver |
HEADSET_PLUG | Conexión de los auriculares | B. Receiver |
Service
Un servicio no tiene interfaz gráfica y suele ejecutarse en segundo plano, es decir, funcionan en background por tiempo indefinido. Como por ejemplo obtener el estado de un sensor, (acelerómetro) y mostrar el resultado.
Es similar al concepto de Daemon en Linux o un servicio de Windows. Podemos estar con el teléfono haciendo otra cosa y escuchar música. O la recepción de correos que no lo vemos, hace un ruido, pero en segundo plano.
Tomemos el ejemplo de un MP3
· Una actividad presenta una lista de los mp3.
· En esa Activity se solicita la reproducción.
· Esta reproducción se ejecuta por medio de un servicio.
· La actividad puede parar, pero el servicio sigue funcionando. El usuario puede seguir interactuando con el resto.
Si el ciclo de vida de una actividad es prolongado, deberemos incluirlo en un Servicio.
Broadcast receivers
Solo reacciona ante componentes Broadcast.
· Batería baja
· Cambio de idioma
· Cambio de hora
No tienen interfaz de usuario al igual que service.
Una aplicación puede tener varios Broadcast receivers. Para recibir las notificaciones es necesario heredar de Broadcast Receiver e implementar el método onReceive() para procesar los Intent entrantes. Los argumentos del método son Context e Intent.
Es importante que el código que se ejecute en este método no sea prolongado. Si BroadcastReceiver necesita algo más que una pequeña cantidad de código es mejor que ese código solicite un servicio para completar la funcionalidad deseada. Si Service es adecuado para operaciones de larga duración, BroadcastReceiver lo es para responder a distintos eventos.
La clase Intent se utiliza como desencadenador de eventos BroadcastReceiver. El uso de intent es independiente de los empleados para iniciar una actividad o un servicio.
Si una aplicación desea recibir y responder a un evento global, como por ejemplo un mensaje o una llamada de teléfono, debe registrarse como BroadcastReceiver y para ello existen dos técnicas:
· Implementar un elemento receiver en el Androidmanifest.xml, que describe el nombre de clase de BroadcastReceiver y enumera sus IntentFilter. Al registrar en AndroidManifest.xml, se desencadena solo ejecutándose la aplicación al notificarse el evento. Es el sistema operativo Android el que lleva a cabo estas tareas de mantenimiento.
· Una aplicación puede registrar en tiempo de ejecución a través del método registerReceiver de la clase Context.
Pueden utilizar varios mecanismos para generar alertas
· Visuales (Notificatión Manager)
· Vibraciones, sonidos, etc.
ContentProvider
Es un proveedor de datos. Nos permite acceder y modificar los datos de una forma controlada por el proveedor de los mismos.
Es el mecanismo que se utiliza para exportar datos de una aplicación. Si una aplicación gestiona datos y debe mostrarlos en otra aplicación Android entonces deberemos implementar ContentProvider.
ContentProvider puede proporcionar datos a una actividad o un servicio de la misma aplicación o diferente.
ContentProvider puede utilizar cualquier mecanismo de almacenamiento de datos para Android.
En cierto modo ContentProvider actua como un servidor de base de datos.
Tipos de procesos en Android
Android prioriza los procesos bajo una jerarquía, asignando una importancia a cada proceso dentro del sistema. En función de esta jerarquía existen determinados tipos de procesos.
· Foreground Process. Es un proceso en primer plano, posee un Activity en pantalla, con el que el usuario está interactuando (onResume() ha sido llamado o un IntentReceiver está en ejecución. Este proceso será el último en eliminarse en caso de que el sistema necesite memoria.
· Visible process. Este proceso tiene un Activity, pero no está en primer plano, (onPause() ha sido llamado). Este proceso no se eliminará a no ser que se necesite para mantener los procesos en primer plano.
· Service Process. Este es un proceso que posee un servicio iniciado con startService(). Estos procesos no son visibles para el usuario y suelen ser importantes como música, conexiones, etc.
· Backgrund Process. Este es un proceso que posee un Activity no visible actualmente para el usuario (onStop() ha sido invocado). El último proceso de este tipo que ha sido visto por el usuario, será el último en ser eliminado si el sistema necesita memoria.
· Empty Process. Este proceso no aloja ningún componente, solo es necesario para reservar memoria para la ejecución una aplicación. Se suele eliminar con bastante frecuencia.
Suscribirse a:
Entradas (Atom)