guia de aprendizaje de programacion m3s2

178
MODULO III “DESARROLLA APLICACIONES WEB Y MOVILES” Mapa curricular: Submódulo 1 - Desarrolla aplicaciones web Submódulo 2 - Desarrolla aplicaciones móviles Índice Introducción al submódulo Objetivo General Mapa Curricular Mapa de Contenidos Cronograma Ponderaciones Desarrollo de las Esferas de Competencia Cierre del Submódulo Bibliografía Glosario Anexos Plan de Evaluación Guía del Portafolio Instrumentos de Evaluación Proyecto Integrador Elaboraron: Lic. Esteban Angeles Molina Ing. Susana Hernández Ramírez Lic. Renán Abreu Guerrero Ing. Lorena Ramírez Campoy

Upload: jaibo-faper

Post on 26-Sep-2015

77 views

Category:

Documents


17 download

DESCRIPTION

Modulo profesional de programacion

TRANSCRIPT

  • MODULO III DESARROLLA APLICACIONES WEB Y MOVILES

    Mapa curricular: Submdulo 1 - Desarrolla aplicaciones web Submdulo 2 - Desarrolla aplicaciones mviles ndice

    Introduccin al submdulo

    Objetivo General

    Mapa Curricular

    Mapa de Contenidos

    Cronograma

    Ponderaciones

    Desarrollo de las Esferas de Competencia

    Cierre del Submdulo

    Bibliografa

    Glosario

    Anexos

    Plan de Evaluacin

    Gua del Portafolio

    Instrumentos de Evaluacin

    Proyecto Integrador

    Elaboraron:

    Lic. Esteban Angeles Molina

    Ing. Susana Hernndez Ramrez

    Lic. Renn Abreu Guerrero

    Ing. Lorena Ramrez Campoy

  • Introduccin al submdulo

    Es indudable el vertiginoso avance de las posibilidades que tiene los dispositivos

    mviles actuales en la comunicacin por diversas vas, el acceso a servicios de

    forma remota y mvil y el manejo de aplicaciones hasta hace poco tiempo slo

    reservadas a plataformas fijas.

    El curso tiene, como primer objetivo, dar una panormica general de la tecnologa

    que soporta estos avances y la que hay para el desarrollo de aplicaciones y el

    soporte de servicios mediante dispositivos mviles, profundizndose en las

    plataformas de programacin, lenguajes y entornos de ejecucin y de desarrollo

    ms usados en la actualidad.

    Finalmente se propondrn desarrollos sencillos de programacin de aplicaciones

    adaptados a los conocimientos de cada alumno para poner en prctica lo visto de

    forma terica y para reafirmar al alumno en las posibilidades de desarrollo que

    tienes estas plataformas.

    Cuando hablamos de desarrollar software para dispositivos mviles, lo primero

    que se nos viene a la mente es el desarrollo para telfonos celulares, pero, en

    muchas ocasiones, no tenemos claro qu debemos hacer; Un sitio Web? Una

    aplicacin para el celular?

    Lo cierto es que, un dispositivo mvil no es solo un celular, y que adems, el

    software a desarrollar, puede ser, tanto un sitio Web, como una aplicacin nativa

    para el dispositivo.

    Los celulares no son los nicos dispositivos mviles para los cuales podemos

    desarrollar.

    Podramos programar para otros dispositivos como Palm, Pocket PC, Ipod Touch.

    En fin, dispositivos de mano pequeos con ciertamente, una gran potencia.

  • Objetivo general.

    El alumno ser capaz de desarrollar aplicaciones mviles sobre plataformas

    abiertas y cerradas utilizando diferentes SDKs ejecutndolas tanto en tablets como

    en smartphones.

    Mapa curricular

    Mapa de competencias profesionales de la carrera de Tcnico en

    programacin

    Mapa de Contenidos

    Modulo 3 Desarrolla aplicaciones web y mviles

    Submdulo 2 Desarrolla aplicaciones mviles

  • Competencia 1

    Desarrolla aplicaciones para dispositivos mviles sobre plataformas abiertas

    Atributos de la competencia

    1. Conceptos bsicos

    2. Conocer una plataforma abierta 3. Conocer los dispositivos mviles de plataforma abierta 4. Conocer la programacin del mvil 5. Desarrollo de aplicaciones

    Saberes:

    1) Conceptos bsicos de programacin orientado a objetos POO Java

    2) Entorno de Eclipse

    3) Conocimientos bsicos de XML

    4) SDK

    5) Entorno de Android (AVD)

    6) Desarrollo de aplicaciones

    Actitudes:

    1. Limpieza

    2. Responsabilidad

    3. Orden

    Competencia 2

    Desarrolla aplicaciones para dispositivos mviles sobre plataformas cerradas

    Atributos de la competencia:

    1. Conocer una plataforma cerrada

    2. Conocer los dispositivos mviles de plataforma cerrada

    3. Conocer las caractersticas, ventajas y desventajas de las plataformas cerradas.

    Saberes:

  • 1.

    Actitudes:

    1. Limpieza

    2. Responsabilidad

    3. Orden

    Cronograma (ANEXO ARCHIVO M3S1 Excel)

    Ponderaciones

    En el Submdulo 2 Evidencia de Producto

    Evidencia de Desempeo

    Evidencia de Actitud

    Evidencia de Conocimiento

    Desarrollo de las Esferas de Competencia Competencia 1 Desarrolla aplicaciones para dispositivos mviles sobre plataformas abiertas. Saberes

    1. Conceptos bsicos 2. Conocer tipos de plataformas 3. Conocer los dispositivos mviles de plataforma abierta 4. Conocer la programacin del mvil 5. Desarrollo de aplicaciones

    Ejemplos:

    1. Antecedentes 2. Te presento a Android 3. Instalando Android 4. Mi primer programa 5. Conociendo ms de Java en Eclipse

    Ejercicios:

  • 1. Tabla comparativa de sistemas operativos para plataformas libres 2. Usando Edith Text 3. Edith Text 4. Radio Group 5. Radio Button 6. Check box 7. Spinner 8. Image Button 9. Un segundo Activity 10. Paso de parmetros. 11. Almacenamiento de datos en un archivo de texto en memoria interna , y en

    tarjetas SD 12. Layouts

    Prctica Integradora:

    1. Programando mi pone

    Introduccin a la Competencia 1

    Las plataformas abiertas son aquellas que permiten adaptarlas a las necesidades creando ventajas competitivas para la empresa.

    Las Tecnologas de la Informacin juegan hoy en da un factor determinante en la

    competitividad de las empresas. El seleccionar y mantener una cartera tecnolgica

    competitiva es uno de los grandes retos, en especial para las PyMEs.

    La evolucin acelerada de la tecnologa presenta un enorme reto, desde el punto

    de vista de gestin del conocimiento, lograr soluciones competitivas con fuertes

    diferenciales y alternativas correctas. Adoptar un producto abierto, como una

    plataforma para desarrollar diferenciales de negocio positivos, es una alternativa

    altamente competitiva que permite reducir sustancialmente los costos asociados a

    la innovacin.

    Cmo se ofrecen las plataformas libres?

  • Las plataformas abiertas son aquellas que permiten adaptarse a las necesidades

    creando ventajas para la empresa, negocio, o simplemente mejorar la manera en

    que se realizan diferentes actividades importantes para las organizaciones. Este

    tipo de plataformas no tienen un costo de licenciamiento, pero la mayora tienen

    un costo implcito asociado a la adaptacin, segn los requerimientos de cada

    empresa. La mayora de las veces la adaptacin se tiene que hacer por un

    profesional que conozca la tecnologa y plataforma.

    Hoy en da se puede decir que hay muy pocas soluciones que se puedan

    considerar netamente comerciales o totalmente abiertas. En la mayora de los

    casos, se pueden realizar acuerdos o convenios con los diferentes proveedores

    para que den acceso al cdigo fuente para poder modificarlo.

    El principal modelo de negocio con el que se ofrecen las plataformas libres se

    denomina gift economy o economa del regalo. El regalo en las plataformas

    abiertas es una licencia, generalmente sin costo que permite usar y modificar las

    soluciones segn las necesidades. Pero, qu ganan las empresas al regalar el

    software?

    Los principales ingresos estn en los servicios de soporte para adaptarse a necesidades

    especficas, en lugar de cuotas para el uso (licencias), los servicios que se ofrecen deben ser de

    gran valor para la competitividad,

    El mejor ejemplo de tecnologas abiertas hoy en da es Android que tiene la mayor

    penetracin en el mercado de mviles. Android es un producto abierto (Linux) adaptado a

    una necesidad especfica como lo es el mercado de los smartphones. Es capaz de ser

    instalado en mltiples dispositivos mviles creados por diferentes marcas y al mismo

    tiempo cuenta con una amplia variedad de aplicaciones que en su mayora son gratuitas.

    Iniciamos.

    Atributos de la Competencia 1. Conceptos bsicos 2. Conocer una plataforma abierta 3. Conocer los dispositivos mviles de plataforma abierta 4. Conocer la programacin del mvil 5. Desarrollo de aplicaciones

  • Resultado de Aprendizaje Una vez que se logren adquirir las habilidades necesarias a travs del dominio de la competencia y sus atributos, podr realizar aplicaciones mviles que podrs traer en el bolsillo..

    Saberes(No. 1) TITULO

    1. Recordando la POO 2. Sentencias bsicas de Java

    Instrucciones para el alumno: El alumno analizara los tres mtodos o estrategias para el desarrollo de sistemas; los cuales le darn la pauta de elegir el que le convenga para generar la solucin mas optima a sus problemas. Actitudes:

    1. Orden. 2. Puntualidad. 3. Responsabilidad.

    Saberes a adquirir

    Competencias Genricas: . Se expresa y comunica.

  • Ejemplo (No. 1)

    Titulo: TABLA DE SENTENCIAS BSICAS DE JAVA Instrucciones para el alumno: En la siguiente tabla, escribe en cada uno de los cuadros la informacin que hace falta.

    Escucha, interpreta y emite mensajes pertinentes en distintos contextos

    mediante la utilizacin de medios, cdigos y herramientas apropiados. Manera didctica de lograrla: A travs de una actitud de orden, tomando en cuenta la investigacin sustenta con acervo bibliogrfico.

    Instrucciones para el alumno|

    1. Realiza un mapa conceptual de los principales conceptos de la programacin orientada a objetos, como: clase, objeto, mtodo, encapsulamiento, atributo, herencia, etc.

    Saberes a adquirir

    Recordar los conceptos bsicos que se manipularan de forma cotidiana durante el desarrollo del submdulo, as como nuevos conceptos que se deban adquirir.

    Mtodo didctico Por medio de un mapa conceptual se definirn los conceptos bsicos utilizados en la programacin orientada a objetos, escribiendo la fuente bibliogrfica utilizada.

  • Sentencia Uso int i=1;

    Declaracin de variable i tipo

    entero

    System.out.println("Mi primer

    programa");

    . . .

    Actitudes:

    1. Limpieza. 2. Orden. 3. Respeto. 4. Puntualidad. 5. Responsabilidad.

    Competencias Genricas: Escucha, interpreta y emite mensajes Manera didctica de lograrla: A travs de una actitud de orden, tomando en cuenta la investigacin sustentada con acervo bibliogrfico.

    Ejemplo (No. 2)

    Titulo: TABLA COMPARATIVA DE SISTEMAS OPERATIVOS MOVILES EN PLATAFORMAS ABIERTAS. Instrucciones para el alumno: Realiza una tabla comparativa de los diferentes sistemas operativos mviles, tomando en cuenta el nombre del sistema operativo, principales caractersticas como su capacidad de procesamiento, ventajas, desventajas, aplicaciones existentes, etc..

  • Actitudes:

    1. Limpieza. 2. Orden. 3. Respeto. 4. Puntualidad. 5. Responsabilidad.

    Competencias Genricas: Escucha, interpreta y emite mensajes Manera didctica de lograrla: A travs de una actitud de orden, tomando en cuenta la investigacin sustentada con acervo bibliogrfico.

    Saberes(No. 2) TITULO

    1. Antecedentes de la programacin mvil

    Instrucciones para el alumno: El alumno conocer los orgenes de la programacin mvil, los cuales le darn la pauta de elegir el que le convenga para generar la solucin ms ptima a sus problemas. Actitudes:

    Orden.

    Puntualidad.

    Responsabilidad. Saberes a adquirir

    Competencias Genricas: . Se expresa y comunica.

    Escucha, interpreta y emite mensajes pertinentes en distintos contextos mediante la utilizacin de medios, cdigos y herramientas apropiados.

    Manera didctica de lograrla: A travs de una actitud de orden, tomando en cuenta la investigacin sustenta con acervo bibliogrfico.

  • ANTECEDENTES:

    Aunque el sistema operativo Android tiene algunos aos de vida, la librera Java

    de android consiste ya en ms de 150 paquetes (APIs), que contienen miles de

    clases, mtodos, interfaces y constantes. Para mayor informacin se puede

    verificar en la pgina web de Android Developers.

    Android es un Linux basado en sistema operativo diseado principalmente para

    la pantalla tctil de los dispositivos mviles como telfonos inteligentes y Tablet

    PC . Desarrollado inicialmente por Android Inc., que Google respaldada

    financieramente y ms tarde adquiri en 2005, Android se dio a conocer en 2007

    con la fundacin de la Open Handset Alliance : un consorcio

    de hardware , software y telecomunicaciones empresas dedicadas a la

    promocin abierta normas para los dispositivos mviles. El primer telfono con

    Android fue vendido en octubre de 2008.

    Android es de cdigo abierto y Google libera el cdigo bajo la licencia

    Apache . Este cdigo fuente abierto y licencia permisiva permite que el software

    para ser modificado y distribuido libremente por los fabricantes de dispositivos,

    operadores mviles y desarrolladores entusiastas. Adems, Android tiene una

    gran comunidad de desarrolladores que escriben aplicaciones (" apps ") que

    amplan la funcionalidad de los dispositivos, escrito principalmente en una versin

    personalizada de la Java lenguaje de programacin. En octubre de 2012, haba

    aproximadamente 700.000 aplicaciones disponibles para Android , y la estimacin

    del nmero de aplicaciones descargadas de Google Play , tienda de aplicaciones

    de Android primaria, fue de 25 millones de dlares.

    Estos factores han permitido a Android para convertirse en la plataforma ms

    utilizada telfono inteligente y el software de eleccin para las empresas de

    tecnologa que requieren un bajo costo, sistema personalizable, operativo ligero

    de alta tecnologa, dispositivos sin desarrollar uno desde cero. Como resultado, a

    pesar de estar diseado principalmente para telfonos y tabletas, se ha visto

    aplicaciones adicionales en televisores , consolas de videojuegos y otros aparatos

    electrnicos. Naturaleza abierta de Android ha alentado una gran comunidad de

    desarrolladores y entusiastas de utilizar el cdigo de fuente abierta como una base

    para impulsadas por proyectos comunitarios, que aaden nuevas caractersticas

    para usuarios avanzados o llevar Android a los dispositivos que fueron lanzados

    oficialmente funcionando como sistema operativo.

    Clasificacin de los dispositivos mviles

  • En la dcada de los 90, tras la aparicin de estos primeros dispositivos, se

    establecieron clasificaciones ms o menos rigurosas era posible debido a que

    cada aparato estaba claramente definido para una funcin determinada o para un

    pblico concreto. Por ejemplo, un smartphone representa una evolucin de un

    telfono mvil tradicional, su cometido es ofrecer comunicacin telefnica; sin

    embargo, cuenta con otros servicios adicionales como la conexin a Internet y

    aplicaciones, servicios propios de un ordenador, cmara de fotos y de vdeo o la

    posibilidad de reproducir pelculas o videojuegos.

    La clasificacin que a aqu se propone utilizar como principal criterio la

    funcionalidad o servicio principal para la que ha sido diseado bien el propio

    dispositivo mvil, o bien aquel dispositivo del que directamente procede y del que

    supone una evolucin mejorada.

    Los dispositivos mviles pueden ser clasificados en los siguientes grupos:

    Dispositivo de comunicacin: Un dispositivo de comunicacin es aquel

    dispositivo mvil cuyo cometido principal es ofrecer una infraestructura de

    comunicacin, principalmente telefnica. Estos dispositivos ofrecen adems

    servicios como el envo de mensajes SMS y MMS, o acceso WAP.

    Adems se incluira el tradicional telfono mvil, precursor indiscutible dentro de

    los dispositivos mviles, la BlackBerry y el smartphone, que ampla

    considerablemente las prestaciones del primero mediante pantalla tctil, conexin

    a Internet o la ejecucin de aplicaciones (por ejemplo, iPhone o HTC G1).

    Dispositivo de computacin: Los dispositivos de computacin son aquellos

    dispositivos mviles que ofrecen mayores capacidades de procesamiento

    de datos y cuentan con una pantalla y teclado ms cercanos a un

    ordenador de sobremesa. Dentro de los dispositivos mviles son sin duda

    los que mayores prestaciones hardware ofrecen un mayor tamao, peso y

    precio.

  • Smartphone: (cuya traduccin en espaol sera telfono inteligente) es una

    evolucin del telfono mvil tradicional que cuenta con ciertas caractersticas y

    prestaciones que lo acercan ms a un ordenador personal que a un telfono

    tradicional. Las caractersticas, se puede encontrar una mejora en la capacidad de

    proceso y almacenamiento de datos, conexin a Internet mediante Wi-Fi, pantalla

    tctil, acelermetro, posicionador geogrfico, teclado QWERTY y diversas

    aplicaciones de usuario como navegador web, cliente de correo, aplicaciones

    ofimticas, reproductores de vdeo y audio, etc. incluyendo la posibilidad de

    descargar e instalar otras nuevas.

    Los smartphone las limitaciones se reflejan en pantallas ms pequeas, menor

    capacidad del procesador, restricciones de memoria RAM y memoria persistente,

    y necesidad de adaptar el consumo de energa a la capacidad de una pequea

    batera.

    Funciones del emulador: El SDK de Android incluye un completo emulador que

    permite probar y depurar eficientemente las aplicaciones que se van

    desarrollando. Este emulador incluye diferentes skins para representar

    grficamente un dispositivo mvil real, con pantalla, teclado y botones de funcin,

    as como aplicaciones de usuario preinstaladas que incluyen navegador web o

    visor de mapa, y una consola que permite interactuar con l a travs de Telnet.

    Saberes N3

    Instalacin de Android

    En este apartado el profesor explicar la manera de instalar el emulador del

    sistema operativo, utilizando tecnologas de informacin para su apoyo.

  • Descarga de herramientas necesarios para programar para Android.

    1 - Primero debemos instalar el compilador de Java y la mquina virtual. Estas herramientas las podemos descargar de: Java SE Development Kit (JDK). 2 - El segundo paso es la descarga del editor Eclipse, lo hacemos del sitio: Eclipse IDE for Java Developers. 3 - El tercer paso es descargar el SDK Android, lo podemos descargar de: SDK de Android El archivo que descargaremos es el zip: android-sdk_rxx-windows.zip (donde xx es el nmero de la ltima versin) Descomprimimos el archivo y lo ubicamos en la raiz de la unidad c\:, luego de descomprimir tenemos una carpeta llamada: c:\android-sdk-windows 4 - El cuarto paso es ejecutar el programa: c:\android-sdk-windows\SDK Manager.exe que se encuentra en la carpeta que acabamos de descomprimir el SDK de Android. Aparece esta ventana (presionamos cancelar con el objetivo de seleccionar una AVD (Android Virtual Device) y no tener que esperar una eternidad descargando todas las versiones de AVD):

  • Instalaremos en primera instancia la versin del SDK 2.3.3 (la lnea 2 est orientada al desarrollo de aplicaciones para celulares y la lnea 3 est orientada a tablet). Seleccionamos Available packages y luego del lado derecho solo dejamos tildado la versin del SDK 2.3.3 (ms adelante podemos instalar otras versiones de Android) Por ltimo procedemos a presionar el botn "Install Selected":

  • Aparece un dilogo donde nos informa el progreso de instalacin:

    Ahora ya podemos cerrar la aplicacin del SDK Manager.exe 5 - Instalacin del plugin de Eclipse para trabajar con Android. Para instalar el plugin ingresamos al entorno Eclipse. Luego desde el men de opciones: Help-> Install New Software, aparece el siguiente dilogo, presionamos el botn add y disponemos la url donde se encuentra el plugin:

  • En Location disponemos la url: https://dl-ssl.google.com/android/eclipse/ Tildamos "Developer Tools", presionamos seguidamente el botn "Next" dos veces hasta que aparece la ventana donde tenemos que aceptar los "Trminos y Condiciones" y presionamos el botn "Finish" Al finalizar la instalacin del plugin se reinicia el Eclipse para que se instale completamente. 6 - El siguiente paso que debemos efectuar para poder empezar a desarrollar aplicaciones para Android es configurar el SDK: Para esto nos dirigimos a la opcin Windows -> Preferences donde aparece el siguiente dilogo:

  • Seleccionamos la carpeta donde descomprimimos SDK de Android y presionamos el botn "Apply" 7 - Por ltimo debemos crear el AVD (Android Virtual Device) para ello nos dirigimos a la opcin Window -> Android SDK and AVD Manager. En este dilogo debemos crear el emulador de Android (presionamos el botn New...):

  • En este dilogo asignamos un nombre a nuestro AVD, lo enlazamos con la versin

  • de SDK respectivo, fijamos un tamao al SD Card:

    Ya tenemos todo configurado para el desarrollo de aplicaciones Android.

    Saberes N3 Mi primer programa

  • SABERES A ADQUIRIR

    Conocer la estructura y funcionamiento de Eclipse.

    Ya tenemos todo lo necesario instalado para implementar el primer proyecto. Desde el men de opciones: File -> New -> Android Project

    En este dilogo especificamos el nombre del proyecto y el nombre del paquete java donde se almacenarn los archivos java que creemos.

  • El plugin de Android nos genera todos los directorios y archivos bsicos para iniciar nuestro proyecto:

    No haremos en este momento un anlisis del significado y objetivo de cada uno de estos directorios y archivos generados, sino a medida que avancemos con este curso iremos viendo en forma puntual y profunda. La interfaz visual de nuestro programa para Android se almacena en un archivo XML en la carpeta res, subcarpeta layout y el archivo se llama main.xml. En esta carpeta tenemos creada nuestra primer pantalla. Al seleccionar este archivo el plugin de Android nos permite visualizar el contenido en "vista de diseo (Graphical Layout)":

  • Si seleccionamos la otra pestaa podemos visualizar el archivo main.xml en formato de texto:

  • El plugin Android ya insert un control de tipo LinealLayout que especifica que todos los controles visuales que se inserten se dispondrn uno debajo del otro ya que la propiedad orientation est inicializada con el valor vertical (orientation="vertical") Ya veremos que podemos modificar todo este archivo para que se adapte a la aplicacin que queremos desarrollar. Luego contenido en el control LinealLayout hay otro control de tipo TextView que es bsicamente una etiqueta o label que mostrar en pantalla el valor almacenado en la propiedad text. Podemos modificar directamente el archivo xml o en "vista de diseo" modificar los valores de las propiedades. Elegimos nuevamente la pestaa "Graphical Layout" y seleccionamos el TextView con el mouse y presionamos el botn derecho del mouse, buscamos la propiedad text y la cambiamos por la etiqueta: "Mi primer programa para Android":

  • Con esto ya podemos probar nuestra primer aplicacin para un dispositivo Android. Presionamos Run desde el men o el cono respectivo. Seleccionamos que se ejecute como aplicacin "Android Application". Ahora se abrir el AVD(Android Virtual Device) esto tarda bastante tiempo, es muy importante recordar que luego de ver ejecutndose el programa NO debemos cerrar el AVD para que la prxima ejecucin se inicie ms rpido (podemos minimizar el AVD) Ahora podemos ver nuestra primer aplicacin corriendo en el emulador de Android:

  • Como hemos visto el plugin de Eclipse nos genera en forma automtica todas las carpetas y archivos bsicos que necesitamos en un principio. En el siguiente concepto podremos empezar a programar verdaderamente. El nico objetivo de este ejercicio es recordar los pasos para crear un proyecto.

    Saberes N4 Conociendo ms de Java en Eclipse.

    SABERES A ADQUIRIR

    Controles: Edith Text

    Radio Group

    Radio Button

    Check box

  • Spinner

    Image Button

    Un segundo Activity

    Paso de parmetros.

    Almacenamiento de datos en un archivo de texto en memoria

    interna , y en tarjetas SD

    Layouts

    Captura del clic de un botn

    Problema:

    Realizar la carga de dos nmeros en controles de tipo EditText. Mostrar un mensaje que solicite la carga de los valores. Disponer un Button para sumar los dos valores ingresados. Mostrar el resultado en un tercer TextView. La interfaz visual debe quedar algo semejante a esto:

  • Veamos paso a paso como creamos la interfaz visual de nuestro programa. Primero borramos el TextView que aparece por defecto cuando se crea un proyecto con el plugin de Android. Ahora desde la ventana "Palette" seleccionamos de la pestaa "Form Widgets" el control "TextView" y lo arrastramos a la ventana de diseo de nuestra interfaz:

  • Ahora lo seleccionamos y presionamos el botn derecho del mouse sobre la componente y especificamos la propiedad text (como habamos visto anteriormente) disponemos el texto "Ingrese el primer valor:":

    Tambin vamos a especificar la propiedad "Id", la misma parece primera en el men contextual:

  • Le asignaremos como nombre a este objeto: tv1 (recordemos que se trata de un objeto de la clase TextView) Ahora de la paleta de componentes seleccionamos la pestaa "Text Fields" y arrastramos el primero (el que tiene la etiqueta abc)

  • Presionando el botn derecho sobre el control EditText configuramos la propiedad Id... con el nombre et1 (este nombre haremos referencia posteriormente desde Java) Efectuamos los mismos pasos para crear el segundo TextView y EditText (inicializamos las propiedades respectivas) Definimos los id con los nombres tv2 y et2, el resultado visual debe ser algo semejante a esto:

  • De la pestaa "Form Widgets" arrastramos un control de tipo "Button":

    Inicializamos la propiedad text con el texto "Sumar" y la propiedad id la dejamos con el valor ya creado llamado "button1". Para terminar con nuestra interfaz visual arrastramos un tercer objeto de tipo TextView y definimos la propiedad id con el valor "tv3" y la propiedad text con

  • el texto "resultado", recordemos que la interfaz final debe ser semejante a esta:

    Si en este momento ejecutamos la aplicacin aparece la interfaz visual correctamente pero cuando presionemos el botn no mostrar la suma. Hasta ahora hemos trabajado solo con el archivo xml (main.xml) donde se definen los controles visuales de la ventana que estamos creando. Abrimos seguidamente el archivo Proyecto002Activity.java que lo podemos ubicar en la carpeta src:

  • La clase Proyecto002Activity hereda de la clase Activity. La clase Activity representa una ventana de Android y tiene todos los mtodos necesarios para crear y mostrar los objetos que hemos dispuesto en el archivo xml. El cdigo fuente de la clase Proyecto002Activity.java es:

    package androidya.proyecto002;

    import android.app.Activity;

    import android.os.Bundle;

    public class Proyecto002Activity extends Activity

    {

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    }

    }

  • Como mnimo se debe sobrescribir el mtodo onCreate heredado de la clase Activity donde procedemos a llamar la mtodo setContentView pasando como referencia una valor almacenado en una constante llamada main contenida en una clase llamada layout que a su vez la contiene una clase llamada R (veremos ms adelante que el plugin de Eclipse para Android se encarga de crear la clase R en forma automtica y sirve como puente entre el archivo xml y nuestra clase Proyecto002Activity)

    Captura de eventos.

    Ahora viene la parte donde definimos variables en java donde almacenamos las referencias a los objetos definidos en el archivo XML. Definimos tres variables, dos de tipo EditText y finalmente una de tipo TextView (estas dos clases de declaran en el paquete android.widget, es necesario importar dichas clases para poder definir las variables de dichas clases):

    package androidya.proyecto002;

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.EditText;

    import android.widget.TextView;

    public class Proyecto002Activity extends Activity

    {

    private EditText et1,et2;

    private TextView tv3;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    }

    }

    Los nombres que le d a los objetos en este caso coinciden con la propiedad id (no es obligatorio):

    private EditText et1,et2;

    private TextView tv3;

  • No definimos TextView para los dos mensajes "Ingrese el primer valor" e "Ingrese el segundo valor" ya que no necesitaremos interactuar con ellos. Tambin veremos que el objeto de la clase Button no es necesario definir un atributo sino que desde el archivo XML inicializaremos la propiedad OnClick. En el mtodo onCreate debemos enlazar estas variables con los objetos definidos en el archivo XML, esto se hace llamando al mtodo findViewById: public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    }

    Al mtodo findViewById debemos pasar la constante creada en la clase R (recordemos que se crea automticamente esta clase) el nombre de la constante si debe ser igual con el nombre de la propiedad del objeto creado en el archivo XML. Como la clase findViewById retorna una clase de tipo View luego debemos utilizar el operador cast (es decir le antecedemos entre parntesis el nombre de la clase) Ya tenemos almacenados en las variables las referencias a los tres objetos que se crean al llamar al mtodo:setContentView(R.layout.main); . Ahora planteamos el mtodo que se ejecutar cuando se presione el botn (el mtodo debe recibir como parmetro un objeto de la clase View) En nuestro ejemplo lo llam sumar:

    package androidya.proyecto002;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.EditText;

    import android.widget.TextView;

    public class Proyecto002Activity extends Activity

    {

    private EditText et1,et2;

    private TextView tv3;

    /** Called when the activity is first

    created. */

    @Override

  • public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    }

    //Este mtodo se ejecutar cuando se presione

    el botn

    public void sumar(View view) {

    }

    }

    Ahora debemos ir al archivo XML e inicializar la propiedad OnClick del objeto button1 con el nombre del mtodo que acabamos de crear (este paso es fundamental para que el objeto de la clase Button pueda llamar al mtodo sumar que acabamos de crear):

  • Finalmente implementaremos la lgica para sumar los dos valores ingresados en los controles EditText: public void sumar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    }

    Extraemos el texto de los dos controles de tipo EditText y los almacenamos en dos variables locales de tipo String. Convertimos los String a tipo entero, los sumamos y el resultado lo enviamos al TextView donde se muestra la suma (previo a convertir la suma a String) La clase completa queda entonces como:

    package androidya.proyecto002;

  • import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.EditText;

    import android.widget.TextView;

    public class Proyecto002Activity extends Activity

    {

    private EditText et1,et2;

    private TextView tv3;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    }

    //Este mtodo se ejecutar cuando se presione

    el botn

    public void sumar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    }

  • }

    Si ejecutamos nuestro programa podemos ver ahora que luego de cargar dos valores al presionar el botn aparece en el tercer TextView el resultado de la suma de los dos EditText:

    Controles RadioGroup y RadioButton

    El objetivo de este concepto es practicar la implementacin de un programa que requiera controles de tipo RadioButton para seleccionar una actividad. Aprenderemos como agrupar un conjunto de RadioButton y verificar cual est seleccionado.

    Problema:

    Realizar la carga de dos nmeros en controles de tipo EditText. Mostrar un mensaje que solicite la carga de los valores. Disponer dos controles de tipo RadioButton para seleccionar si queremos sumar o restar dichos valores.

  • Finalmente mediante un control de tipo Button efectuamos la operacin respectiva. Mostramos el resultado en un TextView. El problema es similar al anterior. Para disponer los controles de tipo RadioButton debemos en realidad primero insertar un control de tipo RadioGroup (este control se encuentra en la paleta de componentes en la pestaa FormWidgets):

    Cuando arrastramos el control RadioGroup al formulario se generan automticamente 3 objetos de la clase RadioButton contenidos dentro del RadioGroup, podemos fcilmente identificar que los controles RadioButton pertenecen a dicho RadioGroup viendo la ventana de "Outline" del Eclipse (donde nos muestra todos los controles insertados hasta el momento):

  • Nuestro problema solo requiere dos controles de tipo RadioButton. Para borrarlo lo podemos hacer directamente del formulario seleccionndolo y presionando la tecla delete o seleccionndolo desde la ventana "Outline" y luego presionando la tecla delete .

    Ahora a los dos controles de tipo RadioButton definimos sus id (los llamaremos r1 y r2 respectivamente) Cambiamos sus propiedades text por los textos "sumar" y "restar". No olvidemos tambin cambiar los id de los controles EditText por et1 y et2 (igual que en el problema anterior) Por ltimo agreguemos un botn y un TextView para mostrar el resultado Inicializamos las propiedades del botn con los valores: id : button1

    text : operar

    Y el tercer TextView con los valores:

    id : tv3

    text : resultado

    Podemos controlar en la ventana "Outline" el id definido para cada control (tv1, et1, tv2, et2, radioGroup1, r1, r2, button1, tv3) Tambin podemos observar de que clase es cada control visual y el texto de la

  • propiedad text para aquellos controles que tienen sentido su inicializacin.

    Si nuestro problema requera ms de 3 RadioButton deberamos arrastrar dentro del RadioGroup otros controles de tipo RadioButton que se encuentran tambin en la pestaa de "Form Widgets"

    Captura del evento clic del button e identifiacin del RadioButton seleccionado.

    El cdigo fuente de la clase Proyecto003Activity es:

    package androidya.proyecto003;

    import android.view.View;

    import android.widget.EditText;

    import android.widget.RadioButton;

    import android.widget.TextView;

    public class Proyecto003Activity extends Activity

    {

    private EditText et1,et2;

    private TextView tv3;

    private RadioButton r1,r2;

  • /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    r1=(RadioButton)findViewById(R.id.r1);

    r2=(RadioButton)findViewById(R.id.r2);

    }

    //Este mtodo se ejecutar cuando se presione

    el botn

    public void operar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

    if (r1.isChecked()==true) {

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    } else

    if (r2.isChecked()==true) {

    int resta=nro1-nro2;

    String

    resu=String.valueOf(resta);

    tv3.setText(resu);

    }

    }

    }

  • Primero debemos enlazar el objeto button1 con el mtodo operar. Para esto similar al problema anterior seleccionamos el control button1 y cambiamos la propiedad OnClick por el valor operar (si no hacemos esto nunca se ejecutar el mtodo operar de la clase Proyecto003Activity) Como podemos ver el cdigo fuente es igual al problema anterior. Tenemos dos objetos ms que debemos inicializar en el mtodo onCreate:

    r1=(RadioButton)findViewById(R.id.r1);

    r2=(RadioButton)findViewById(R.id.r2);

    Las variables r1 y r2 son de la clase RadioButton y son necesarios en el mtodo operar para verificar cual de los dos RadioButton estn seleccionados. La clase RadioButton tiene un mtodo llamado isChecked que retorna true si dicho elemento est seleccionado:

    public void operar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

    if (r1.isChecked()==true) {

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    } else

    if (r2.isChecked()==true) {

    int resta=nro1-nro2;

    String resu=String.valueOf(resta);

    tv3.setText(resu);

    }

    }

  • Control CheckBox

    El objetivo de este concepto es practicar lo visto hasta ahora e incorporar el control visual CheckBox

    Problema:

    Realizar la carga de dos nmeros en controles de tipo EditText. Mostrar un mensaje que solicite la carga de los valores. Disponer dos controles de tipo CheckBox para seleccionar si queremos sumar y/o restar dichos valores. Finalmente mediante un control de tipo Button efectuamos la operacin respectiva. Mostramos el o los resultados en un TextView. Lo nuevo en este problema es la insercin de dos objetos de la clase CheckBox que se encuentra en la pestaa "FormWidgets":

    Luego la interfaz grfica final para este problema y los nombres de los controles los podemos ver en la ventana "Outline":

  • No olvidemos inicializar la propiedad OnClick del objeto button1 con el valor "operar" (es el nombre del mtodo a ejecutarse cuando se presione el botn y lo implementa la clase que hacemos)

    Cdigo fuente:

    package androidya.proyecto004;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.CheckBox;

    import android.widget.EditText;

  • import android.widget.TextView;

    public class Proyecto004Activity extends Activity

    {

    private EditText et1,et2;

    private TextView tv3;

    private CheckBox checkBox1,checkBox2;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    checkBox1=(CheckBox)findViewById(R.id.checkBox1);

    checkBox2=(CheckBox)findViewById(R.id.checkBox2);

    }

    //Este mtodo se ejecutar cuando se presione

    el botn

    public void operar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

    String resu="";

    if (checkBox1.isChecked()==true) {

    int suma=nro1+nro2;

    resu="La suma es: "+ suma;

  • }

    if (checkBox2.isChecked()==true) {

    int resta=nro1-nro2;

    resu=resu + " La resta es: "+ resta;

    }

    tv3.setText(resu);

    }

    }

    Definimos dos objetos de la clase CheckBox como atributos de la clase: private CheckBox checkBox1,checkBox2;

    En el mtodo onCreate los inicializamos con los objetos definidos en el archivo XML: checkBox1=(CheckBox)findViewById(R.id.checkBox1);

    checkBox2=(CheckBox)findViewById(R.id.checkBox2);

    En el mtodo operar debemos definir dos if a la misma altura ya que los dos controles de tipo CheckBox pueden estar seleccionados simultaneamente. Definimos una variable de tipo String y la inicializamos con cadena vaca para el caso en que los dos CheckBox no estn seleccionados: String resu="";

    if (checkBox1.isChecked()==true) {

    int suma=nro1+nro2;

    resu="La suma es: "+ suma;

    }

    if (checkBox2.isChecked()==true) {

    int resta=nro1-nro2;

    resu=resu + " La resta es: "+ resta;

    }

    tv3.setText(resu);

    Control Spinner

    El objetivo de este concepto es practicar lo visto hasta ahora e incorporar el control visual Spinner El control Spinner muestra una lista de String y nos permite seleccionar uno de ellos. Cuando se lo selecciona se abre y muestra todos sus elementos para permitir seleccionar uno de ellos.

    Problema:

    Realizar la carga de dos nmeros en controles de tipo EditText. Mostrar un mensaje que solicite la carga de los valores. Disponer un control de tipo Spinner que permita seleccionar si queremos sumar, restar, multiplicar o dividir

  • dichos valores. Finalmente mediante un control de tipo Button efectuamos la operacin respectiva. Mostramos el resultado en un TextView. Lo nuevo en este problema es la insercin de un control de tipo Spinner que se encuentra en la pestaa "FormWidgets":

    Definimos la propiedad id con el valor spinner1. En la siguiente imagen en la ventana "Outline" de Eclipse podemos observar los objetos dispuestos en el formulario, sus Id, sus textos y de que clase son cada uno:

  • No olvidemos inicializar la propiedad OnClick del objeto button1 con el valor "operar" (dicho nombre es el mtodo que debemos implementar)

    Cdigo fuente:

    package androidya.proyecto005;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.ArrayAdapter;

    import android.widget.EditText;

  • import android.widget.Spinner;

    import android.widget.TextView;

    public class Proyecto005Activity extends Activity

    {

    private Spinner spinner1;

    private EditText et1,et2;

    private TextView tv3;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    et2=(EditText)findViewById(R.id.et2);

    tv3=(TextView)findViewById(R.id.tv3);

    spinner1 = (Spinner)

    findViewById(R.id.spinner1);

    String

    []opciones={"sumar","restar","multiplicar","divid

    ir"};

    ArrayAdapter adapter = new

    ArrayAdapter(this,android.R.layout.simple

    _spinner_item, opciones);

    spinner1.setAdapter(adapter);

    }

    //Este mtodo se ejecutar cuando se presione

    el botn

    public void operar(View view) {

    String valor1=et1.getText().toString();

    String valor2=et2.getText().toString();

    int nro1=Integer.parseInt(valor1);

    int nro2=Integer.parseInt(valor2);

  • String

    selec=spinner1.getSelectedItem().toString();

    if (selec.equals("sumar")) {

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    } else

    if (selec.equals("restar")) {

    int resta=nro1-nro2;

    String

    resu=String.valueOf(resta);

    tv3.setText(resu);

    }

    else

    if (selec.equals("multiplicar"))

    {

    int multi=nro1*nro2;

    String

    resu=String.valueOf(multi);

    tv3.setText(resu);

    }

    else

    if (selec.equals("dividir"))

    {

    int divi=nro1/nro2;

    String

    resu=String.valueOf(divi);

    tv3.setText(resu);

    }

    }

    }

    Definimos un objeto de la clase Spinner: private Spinner spinner1;

    En el mtodo onCreate obtenemos la referencia al control visual declarado en el archivo XML: spinner1=(Spinner)findViewById(R.id.spinner1);

  • Definimos un vector con la lista de String que mostrar el Spinner: String []opciones={"sumar","restar","multiplicar","dividir"};

    Definimos y creamos un objeto de la clase ArrayAdapter:: ArrayAdapter adapter = new

    ArrayAdapter(this,android.R.layout.simple_spinner_item,

    opciones);

    Al constructor le pasamos como primer parmetro la referencia de nuestro Activity (this), el segundo parmetro indica el tipo de Spinner, pudiendo ser las constantes: android.R.layout.simple_spinner_item

    android.R.layout.simple_spinner_dropdown_item

    El tercer parmetro es la referencia del vector que se mostrar: Luego llamamos al mtodo setAdapter de la clase Spinner pasando la referencia del objeto de la clase ArrayAdapter que acabamos de crear: spinner1.setAdapter(adapter);

    En el mtodo operar que se ejecuta cuando presionamos el botn procedemos a extraer el contenido seleccionado del control Spinner: String selec=spinner1.getSelectedItem().toString();

    Luego mediante una serie de if anidados verificamos si debemos sumar, restar, multiplicar o dividir: if (selec.equals("sumar")) {

    int suma=nro1+nro2;

    String resu=String.valueOf(suma);

    tv3.setText(resu);

    } else

    if (selec.equals("restar")) {

    int resta=nro1-nro2;

    String resu=String.valueOf(resta);

    tv3.setText(resu);

    }

    else

    if (selec.equals("multiplicar")) {

    int multi=nro1*nro2;

    String resu=String.valueOf(multi);

    tv3.setText(resu);

    }

    else

    if (selec.equals("dividir")) {

    int divi=nro1/nro2;

    String resu=String.valueOf(divi);

    tv3.setText(resu);

    }

  • Control ImageButton

    Hemos visto la creacin de objetos de la clase Button, ahora veremos otra clase muy similar a la anterior llamada ImageButton que tiene la misma filosofa de manejo con la diferencia que puede mostrar una imagen en su superficie.

    Problema:

    Disponer un objeto de la clase ImageButton que muestre una imagen de un telfono. Cuando se presione mostrar en un control TextView el mensaje "Llamando". Primero crearemos un proyecto llamado proyecto007 y luego debemos buscar una imagen en formato png que represente un telefono de 50*50 pxeles. Nombre del archivo: telefono.png Ahora copiamos el archivo a la carpeta de recursos de nuestro proyecto : res\drawable-mdpi Desde el Eclipse en la ventana "Package Explorer" navegamos hasta la carpeta res y entramos al directorio drawable-mdpi y vemos que todava no est el archivo que acabamos de copiar. Para que se actualice el proyecto presionamos el botn derecho del mouse sobre esta carpeta y seleccionamos la opcin "Refresh":

  • Vemos que se actualiz el contenido de la carpeta y aparece la imagen que copiamos previamente. Ahora insertaremos el objeto de la clase ImageButton en el formulario de nuestra aplicacin. La clase ImageButton se encuentra en la pestaa "Image & Media":

  • Aparece un dilogo de donde seleccionamos el archivo telefono. Luego de esto podemos ver que la superficie del objeto de la clase ImageButton muestra la imagen que almacenamos previamente en la carpeta de res. Si queremos cambiar el archivo a mostrar debemos modificar la propiedad src (aparece nuevamente el dilogo que nos permite seleccionar la imagen) Inicializamos la propiedad ID con el nombre bi1 Agreguemos un TextView a nuestra aplicacin y configuremos sus propiedades ID (con tv1) y text. Luego la interfaz visual debe ser similar a:

  • Cdigo fuente:

    package androidya.proyecto007;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.TextView;

  • public class Proyecto007Activity extends Activity

    {

    private TextView tv1;

    private ImageButton ib1;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    tv1=(TextView)findViewById(R.id.tv1);

    }

    //Este mtodo se ejecutar cuando se presione

    el ImageButton

    public void llamar(View view) {

    tv1.setText("Llamando");

    }

    }

    Definimos los dos atributos: TextView tv1;

    Enlazamos el control definido en el archivo XML y la variable de java: tv1=(TextView)findViewById(R.id.tv1);

    Implementamos el mtodo que se ejecutar cuando se presione el el objeto de la clase ImageButton: public void llamar(View view) {

    tv1.setText("Llamando");

    }

    No olvidemos inicializar la propiedad OnClick del objeto ib1 con el nombre del mtodo "llamar" (recordemos que esto lo hacemos presionando el botn derecho del mouse sobre la imagen del objeto de la clase ImageButton y desde la opcin properties accedemos a la propiedad OnClick)

    Comentarios extras de este control.

    Cuando copiamos el archivo lo hicimos a la carpeta: drawable-mdpi

    Pero vimos que hay otras dos carpetas con nombres similares:

  • drawable-ldpi

    drawable-hdpi

    El objetivo de estas otras dos carpetas es guardar las mismas imgenes pero con una resolucin mayor si la guardamos en drawable-hdpi y con una resolucin menor al guardarla en drawable-ldpi. Esto se hace si queremos que nuestra aplicacin sea ms flexible si se ejecuta en un celular, en un tablet, en un televisor etc. Debemos tener en cuenta estos tamaos: En la carpeta res/drawable-mdpi/

    (guardamos la imagen con el tamao original)

    En la carpeta res/drawable-ldpi/

    (guardamos la imagen con el tamao del 75% con respecto al de la carpeta

    drawable-mdpi)

    En la carpeta res/drawable-hdpi/

    (guardamos la imagen con el tamao del 150% con respecto al de la carpeta

    drawable-mdpi)

    Lanzar un segundo "Activity"

    Hasta ahora todos los programas han tenido una sola ventana (Activity) Es muy comn que una aplicacin tenga ms de una ventana. Para implementar esto en Android debemos plantear una segunda clase que tambin herede de la clase Activity (tengamos en cuenta que cuando utilizamos el plugin de Eclipse para Android automticamente cuando creamos un proyecto nos crea el archivo XML y java de la primer Activity) Vamos a ver en este concepto los pasos que debemos dar para crear otro Activity y como activarlo desde el Activity principal.

    Problema:

    Confeccionar un programa que muestre en la ventana principal un botn que al ser presionado muestre otra ventana (Activity) mostrando un TextView con el nombre del programador de la aplicacin y un botn para cerrar la ventana. 1 - Primero creamos un nuevo proyecto que lo llamaremos proyecto008 y en la ventana principal creamos la siguiente interfaz:

  • Es decir que nosotros queremos que cuando se presione el botn "Acerca De" nos abra otra ventana (Activity) y nos muestre el nombre del programador. 2 - Ahora tenemos que crear el segundo Activity. Crearemos primero el archivo XML. Presionamos el botn derecho sobre la carpeta layout y seleccionaremos

  • la opcin New -> Android XML File

    Aqu tenemos que definir el nombre del archivo XML (debe estar en minsculas), lo llamaremos acercade:

  • Implementamos ahora la interfaz visual de esta segunda ventana (Activity) disponiendo un objeto de la clase TextView donde mostramos el nombre del autor de este programa y un Button para cerrar la ventana.

  • 3 - Tenemos ahora que crear el archivo Java donde dispondremos la funcionalidad de la segunda ventana (Activity) Creamos una nueva clase al proyecto desde el men contextual(presionamos el botn derecho del mouse sobre el paquete androidya.proyecto008):

  • Al nombre de la clase la llamamos AcercaDe y debemos especificar que hereda de la clase Activity:

  • Ahora tenemos que modificar el archivo Java generado con esto:

    package androidya.proyecto008;

    import android.app.Activity;

    import android.os.Bundle;

    public class AcercaDe extends Activity {

    /** Called when the activity is first

    created. */

  • @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.acercade);

    }

    }

    Como podemos ver la clase AcercaDe hereda de la clase Activity e implementa el mtodo onCreate para enlazar el archivo XML que creamos anteriormente. 4 - Otro paso fundamental es registrar el Activity en el archivo "AndroidManifest.xml" que se encuentra en la raiz principal del proyecto. Seleccionamos el archivo y activamos la pestaa : "Application", presionamos el botn "add" y seleccionamos "Activity":

    Por ltimo seleccionamos en "Application Nodes" la actividad creada y definimos la propiedad Name con el nombre de la clase que la implementa (en nuestro caso se llama AcercaDe):

  • 5 - Ahora implementaremos la funcionalidad en la actividad (Activity) principal para que se active la segunda ventana. Inicializamos la propiedad OnClick del objeto de la clase Button con el valor "lanzar", este es el mtodo que se ejecutar cuando se presione. El cdigo fuente de la actividad principal queda:

    package androidya.proyecto008;

    import android.app.Activity;

    import android.content.Intent;

    import android.os.Bundle;

    import android.view.View;

    public class Proyecto008Activity extends Activity

    {

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    }

    public void lanzar(View view) {

    Intent i = new Intent(this,

    AcercaDe.class );

    startActivity(i);

    }

    }

    En el mtodo lanzar creamos un objeto de la clase Intent y le pasamos como parmetros la referencia del objeto de esta clase (this) y la referencia del otro Activity (Acerca.class) Llamamos posteriormente al mtodo startActivity pasando el objeto de la clase Intent (con esto ya tenemos en pantalla la ventana del segundo Activity: public void lanzar(View view) {

    Intent i = new Intent(this, AcercaDe.class );

    startActivity(i);

    }

  • Si ejecutamos el programa podemos ver que cuando presionamos el botn "Acerca De" aparece la segunda ventana donde se muestra el TextView con el valor "Autor de este programa: Diego" y un botn con el texto "Finalizar" (si presionamos este botn no sucede nada, esto debido a que no hemos asociado ningn evento a dicho botn) 6 - Debemos codificar el evento OnClick de la segunda actividad. Seleccionemos el botn "Finalizar" y definamos en la propiedad OnClick el nombre de mtodo que se ejecutar al presionarse el botn (en nuestro caso lo llamaremos finalizar") : El cdigo fuente de la actividad AcercaDe queda:

    package androidya.proyecto008;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    public class AcercaDe extends Activity {

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.acercade);

    }

    public void cerrar(View view) {

    finish();

    }

    }

    Cuando se presiona el botn finalizar llamando al mtodo finish() que tiene por objetivo liberar el espacio de memoria de esta actividad y pedir que se active la actividad anterior. Ahora nuestro programa est funcionando completamente: Primer Activity:

  • Segundo Activity:

  • Ahora ya tenemos el programa funcionando en forma completa.

    Problema propuesto

    1. Realizar un programa que contenga dos Activity. En el primero que solicite el ingreso de una clave (control Password) Si ingresa la clave "abc123" activar el segundo Activity mostrando en un TextView un mensaje de bienvenida (mostrar en un TextView si se ingrese la clave incorrecta). Llamar al proyecto: proyecto009. En tiempo de ejecucin los dos Activity deben mostrarse algo similar a esto:

  • Lanzar un segundo "Activity" y pasar parmetros.

    Hemos visto en el concepto anterior que un programa puede tener ms de una ventana representando cada ventana con una clase que hereda de Activity. Una situacin muy comn es que la primer ventana necesite enviar datos a la segunda para que a partir de estos proceda a efectuar una accin.

    Problema:

    Confeccionar un programa que solicite el ingrese de una direccin de un sitio web y seguidamente abrir una segunda ventana que muestre dicha pgina. Para resolver este problema utilizaremos el control visual WebView que nos permite mostrar el contenido de un sitio web. Crearemos un nuevo proyecto llamado proyecto010 y lo almacenaremos en el package name: androidya.proyecto010. 1 - Nuestro primer Activity tendr la siguiente interfaz visual (ver controles y ID de los controles):

  • Tenemos un control de tipo TextView (tv1), otro de tipo EditText y finalmente otro de tipo Button (button1) debemos inicializar las propiedades de cada uno de estos tres objetos. El cdigo fuente de esta Activity es:

    package androidya.proyecto010;

    import android.app.Activity;

    import android.content.Intent;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.EditText;

    public class Proyecto010Activity extends Activity

    {

    private EditText et1;

  • /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    }

    public void ejecutar(View view) {

    Intent i = new Intent(this,

    Actividad2.class );

    i.putExtra("direccion",

    et1.getText().toString());

    startActivity(i);

    }

    }

    Como podemos ver la diferencia con el concepto anterior es que llamamos al mtodo putExtra de la clase Intent. Tiene dos parmetros de tipo String, en el primero indicamos el nombre del dato y en el segundo el valor del dato: public void ejecutar(View view) {

    Intent i = new Intent(this, Actividad2.class );

    i.putExtra("direccion", et1.getText().toString());

    startActivity(i);

    }

    La segunda interfaz visual (recordemos que debemos presionar el botn derecho sobre la carpeta layout y seleccionar la opcin New -> Android XML File) la llamaremos actividad2.xml:

  • En esta interfaz disponemos primero un control de tipo Button (button1) y un objeto de la clase WebView (se encuentra en la pestaa "Composite") y lo dejamos con el ID por defecto llamado webView1 Tenemos que crear el archivo Java donde dispondremos la funcionalidad de la segunda ventana (Activity) Creamos una nueva clase al proyecto desde el men contextual(presionamos el botn derecho del mouse sobre el paquete androidya.proyecto010) Al nombre de la clase la llamamos Actividad2 y debemos especificar que hereda de la clase Activity Ahora tenemos que modificar el archivo Java generado con esto:

    package androidya.proyecto010;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.webkit.WebView;

    public class Actividad2 extends Activity {

  • private WebView webView1;

    @Override

    public void onCreate(Bundle b) {

    super.onCreate(b);

    setContentView(R.layout.actividad2);

    webView1=(WebView)findViewById(R.id.webView1);

    Bundle bundle=getIntent().getExtras();

    webView1.loadUrl("http://"+bundle.getString("dire

    ccion"));

    }

    public void finalizar(View view) {

    finish();

    }

    }

    En esta clase definimos una variable de tipo Bundle y la inicializamos llamando al mtodo getExtras() de la clase Intent (esto lo hacemos para recuperar el o los parmetros que envi la otra actividad (Activity)): Bundle bundle=getIntent().getExtras();

    webView1.loadUrl("http://"+bundle.getString("direccion"));

    El mtodo loadUrl de la clase WebView permite visualizar el contenido de un sitio web. Otro paso fundamental es registrar el Activity en el archivo "AndroidManifest.xml" que se encuentra en la raiz principal del proyecto. Seleccionamos el archivo y activamos la pestaa : "Application", presionamos el botn "add" y seleccionamos "Activity". Por ltimo seleccionamos en "Application Nodes" la actividad creada y definimos la propiedad Name con el nombre de la clase que la implementa (en nuestro caso se llama Actividad2) Como nuestra aplicacin debe acceder a internet debemos hacer otra configuracin en el archivo "AndroidManifest.xml", debemos ir a la pestaa "Permissions" presionar el botn "Add" y seleccionar "Uses Permissions":

  • Luego fijar en la propiedad name el valor android.permission.INTERNET Ahora nuestro programa debera estar funcionando completamente. La primer ventana debera ser algo similar a esto:

  • La segunda ventana debera ser algo similar a esto otro:

    Almacenamiento de datos en un archivo de texto en la memoria

    interna.

    Otra posibilidad de almacenar datos en nuestro dispositivo Android es el empleo de un archivo de texto que se almacenar en el almacenamiento interno del equipo (la otro posibilidad es almacenarlo en una tarjeta SD Card)

    Problema:

    Confeccionar un programa que permita almacenar notas en un control EditText y cuando se presione un botn almacenar los datos del EditText en un archivo

  • de texto llamado "notas.txt". Cada vez que se ingrese al programa verificar si existe el archivo de textos "notas.txt" proceder a su lectura y almacenamiento de datos en el EditText. Crear un proyecto en Eclipse de tipo "Android Project" y definir como nombre: proyecto013 y localizarlo en el paquete androidya.proyecto013. La interfaz visual, los controles y sus ID son los siguientes:

    El cdigo fuente de la aplicacin:

    package androidya.proyecto013;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

  • import android.widget.EditText;

    import android.widget.Toast;

    public class Proyecto013Activity extends Activity

    {

    private EditText et1;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.et1);

    String []archivos=fileList();

    if (existe(archivos,"notas.txt"))

    try {

    InputStreamReader archivo=new

    InputStreamReader(openFileInput("notas.txt"));

    BufferedReader br=new

    BufferedReader(archivo);

    String linea=br.readLine();

    String todo="";

    while (linea!=null)

    {

    todo=todo+linea+"\n";

    linea=br.readLine();

    }

    br.close();

    archivo.close();

    et1.setText(todo);

    } catch (IOException e)

    {

    }

  • }

    private boolean existe(String[]

    archivos,String archbusca)

    {

    for(int f=0;f

  • clase Activity que le pasamos como parmetro el nombre del archivo de texto y el modo de apertura. Seguidamente si el archivo se cre correctamente procedemos a llamar al mtodo write y le pasamos el String a grabar, en este caso extraemos los datos del EditText: archivo.write(et1.getText().toString());

    Luego de grabar con el mtodo write llamamos al mtodo flush para que vuelque todos los datos que pueden haber quedado en el buffer y procedemos al cerrado del archivo: archivo.flush();

    archivo.close();

    Todo esto est cerrado en un try/catch para verificar si sucede algn error en la apertura del archivo. Finalmente mostramos un mensaje temporal en pantalla utilizando la clase Toast:

    Toast t=Toast.makeText(this,"Los datos fueron grabados",

    Toast.LENGTH_SHORT);

    t.show();

    finish();

    Para crear un objeto de la clase Toast llamamos al mtodo makeText de la clase Toast y le pasamos la referencia del Activity actual, el String a mostrar y el tiempo de duracin del mensaje. Con el objeto devuelto por el mtodo makeText procedemos a llamar seguidamente al mtodo show para que se muestre el mensaje. Es comn llamar al mtodo show de la clase Toast en una sola lnea como esta: Toast.makeText(this,"Los datos fueron grabados",

    Toast.LENGTH_SHORT).show();

    El mtodo onCreate tiene por objetivo verificar si existe el archivo de texto, proceder a su lectura y mostrar su contenido en el EditText. Primero obtenemos la lista de todos los archivos creados por la Activity. En nuestro ejemplo puede ser cero o uno: String []archivos=fileList();

    Llamamos a un mtodo que verifica si en el vector de tipo String existe el archivo "notas.txt": if (existe(archivos,"notas.txt"))

    En el caso que me retorne true procedemos a crear un objeto de la clase InputStreamReader y al constructor de dicha clase le pasamos el dato devuelto por el mtodo openFileInput: InputStreamReader archivo=new

    InputStreamReader(openFileInput("notas.txt"));

    Creamos un objeto de la clase BufferedReader y le pasamos al constructor la referencia del objeto de la clase InputStreamReader: BufferedReader br=new BufferedReader(archivo);

    Leemos la primer lnea del archivo de texto: String linea=br.readLine();

    Inicializamos un String vaco:

  • String todo="";

    Mientras el mtodo readLine de la clase BufferedReader devuelva un String: while (linea!=null)

    {

    Lo concatenamos al String junto a un salto de lnea: todo=todo+linea+"\n";

    Leemos la prxima lnea: linea=br.readLine();

    }

    Llamamos al mtodo close de la clase BufferedReader y al del InputStreamReader: br.close();

    archivo.close();

    Cargamos el EditText con el contenido del String que contiene todos los datos del archivo de texto: et1.setText(todo);

    El mtodo existe llega un vector de tipo String y otro String a buscar. Dentro de un for verificamos el String a buscar con cada uno de los String del vector, si lo encontramos retornamos true. Si recorre todo el for sin encontrarlo fuera del for retornamos false: private boolean existe(String[] archivos,String archbusca)

    {

    for(int f=0;f

  • El primer paso es modificar el archivo AndroidManifest.xml para permitir el acceso a la tarjeta SD desde nuestra aplicacin esto lo hacemos desde el editor visual del archivo AndroidManifest.xml:

    Debemos presionar el botn "Add" seleccionar "Uses Permision" y luego en name seleccionar "android.permission.WRITE_EXTERNAL_STORAGE". El cdigo fuente es:

  • package androidya.proyecto014;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import android.app.Activity;

    import android.os.Bundle;

    import android.os.Environment;

    import android.view.View;

    import android.widget.EditText;

    import android.widget.Toast;

    public class Proyecto014Activity extends Activity

    {

    EditText et1;

    EditText et2;

    /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.editText1);

    et2=(EditText)findViewById(R.id.editText2);

    }

    public void grabar(View v) {

  • String nomarchivo =

    et1.getText().toString();

    String

    contenido=et2.getText().toString();

    try

    {

    File tarjeta =

    Environment.getExternalStorageDirectory();

    File file = new

    File(tarjeta.getAbsolutePath(), nomarchivo);

    OutputStreamWriter osw =new

    OutputStreamWriter(new FileOutputStream(file));

    osw.write(contenido);

    osw.flush();

    osw.close();

    Toast.makeText(this,"Los datos fueron

    grabados

    correctamente",Toast.LENGTH_SHORT).show();

    et1.setText("");

    et2.setText("");

    }

    catch (IOException ioe)

    {

    }

    }

    public void recuperar(View v) {

    String nomarchivo =

    et1.getText().toString();

    File tarjeta =

    Environment.getExternalStorageDirectory();

    File file = new

    File(tarjeta.getAbsolutePath(), nomarchivo);

    try {

    FileInputStream fIn = new

    FileInputStream(file);

  • InputStreamReader archivo=new

    InputStreamReader(fIn);

    BufferedReader br=new

    BufferedReader(archivo);

    String linea=br.readLine();

    String todo="";

    while (linea!=null)

    {

    todo=todo+linea+"\n";

    linea=br.readLine();

    }

    br.close();

    archivo.close();

    et2.setText(todo);

    } catch (IOException e)

    {

    }

    }

    }

    El mtodo para grabar los datos en un archivo de texto localizado en una tarjeta SD comienza obteniendo el directorio raiz de la tarjeta a travs del mtodo getExternalStorageDirectory(), el mismo retorna un objeto de la clase File. public void grabar(View v) {

    String nomarchivo = et1.getText().toString();

    String contenido=et2.getText().toString();

    try

    {

    File tarjeta = Environment.getExternalStorageDirectory();

    Creamos un nuevo objeto de la clase File indicando el camino de la unidad SD y el nombre del archivo a crear: File file = new File(tarjeta.getAbsolutePath(), nomarchivo);

    Por ltimo similar al acceso de un archivo interno creamos un objeto de la clase OutputStreamWriter: OutputStreamWriter osw =new OutputStreamWriter(new

    FileOutputStream(file));

    Grabamos el contenido del EditText: osw.write(contenido);

    Cerramos el archivo: osw.flush();

    osw.close();

  • Toast.makeText(this,"Los datos fueron grabados

    correctamente",Toast.LENGTH_SHORT).show();

    et1.setText("");

    et2.setText("");

    }

    catch (IOException ioe)

    {

    }

    }

    Para la lectura del archivo nuevamente obtenemos la referencia de la tarjeta SD para obtener el path de la unidad de almacenamiento, el resto del algoritmo es similar al visto con un archivo interno: public void recuperar(View v) {

    String nomarchivo = et1.getText().toString();

    File tarjeta = Environment.getExternalStorageDirectory();

    File file = new File(tarjeta.getAbsolutePath(), nomarchivo);

    try {

    FileInputStream fIn = new FileInputStream(file);

    InputStreamReader archivo=new InputStreamReader(fIn);

    BufferedReader br=new BufferedReader(archivo);

    String linea=br.readLine();

    String todo="";

    while (linea!=null)

    {

    todo=todo+linea+"\n";

    linea=br.readLine();

    }

    br.close();

    archivo.close();

    et2.setText(todo);

    } catch (IOException e)

    {

    }

    }

    Almacenamiento en una base de datos SQLite

    Hemos visto hasta ahora dos modos de almacenar datos en forma permanente (archivos de texto y la clase SharedPreferences), ahora veremos otra herramienta nativa de Android para almacenar datos en una base de datos llamada SQLite. SQLite es una base de datos Open Source, es muy popular en muchos dispositivos pequeos, como Android. Las ventajas que presenta utilizar SQLite es que no requiere configuracin, no tiene un servidor de base de datos ejecutndose en un proceso separado y es relativamente simple su empleo.

    Problema:

    Confeccionar un programa que permita almacenar los datos de votantes de una eleccin. Crear la tabla votantes y definir los campos dni (documento de

  • identidad), nombre del votante, colegio donde vota y nmero de mesa donde vota. El programa debe permitir: 1 - Carga de personas.

    2 - Consulta por el dni (para saber donde vota)

    3 - Borrado de personas

    4 - Modificacin de datos.

    Primero implementamos una interfaz visual similar a esta:

    Lo primero que haremos es crear una clase que herede de SQLiteOpenHelper. Esta clase nos permite crear la base de datos y actualizar la estructura de tablas y datos iniciales. Debemos implementar el constructor y sobreescribir los mtodos onCreate y onUpgrade.

  • El mtodo onCreate se le llama cuando la base de datos se crea por primera vez. Aqu es donde se define la estructura de las tablas y se cargan eventualmente los datos iniciales En el mtodo onUpgrade se llama cuando la base de datos debe ser actualizada. Tiene por objetivo eliminar tablas, aadir tablas, o hacer cualquier otra cosa que necesita para actualizarse. En nuestro problema implementaremos una nueva clase llamada AdminSQLiteOpenHelper que herede de la clase SQLiteOpenHelper:

    package androidya.proyecto015;

    import android.content.Context;

    import android.database.sqlite.SQLiteDatabase;

    import

    android.database.sqlite.SQLiteDatabase.CursorFact

    ory;

    import android.database.sqlite.SQLiteOpenHelper;

    public class AdminSQLiteOpenHelper extends

    SQLiteOpenHelper {

    public AdminSQLiteOpenHelper(Context

    context, String nombre, CursorFactory factory,

    int version) {

    super(context, nombre, factory,

    version);

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table votantes(dni

    integer primary key, nombre text, colegio text,

    nromesa integer)");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int

    versionAnte, int versionNue) {

    db.execSQL("drop table if exists

    votantes");

  • db.execSQL("create table votantes(dni

    integer primary key, nombre text, colegio text,

    nromesa integer)");

    }

    }

    En el constructor solo llamamos al constructor de la clase padre pasando los datos que llegan en los parmetros: public AdminSQLiteOpenHelper(Context context, String nombre,

    CursorFactory factory, int version) {

    super(context, nombre, factory, version);

    }

    En el mtodo onCreate procedemos a crear la tabla votantes con los cuatro campos respectivos y definiendo el campo dni como primary key: public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table votantes(dni integer primary key,

    nombre text, colegio text, nromesa integer)");

    }

    En el mtodo onUpgrade procedemos a borrar la tabla votantes y crear nuevamente la tabla (en este caso con la misma estructura pero podra ser otra en un caso ms real: public void onUpgrade(SQLiteDatabase db, int versionAnte, int

    versionNue) {

    db.execSQL("drop table if exists votantes");

    db.execSQL("create table votantes(dni integer primary key,

    nombre text, colegio text, nromesa integer)");

    }

    Ahora veamos la otra clase que implementar las altas, bajas, modificaciones y consultas:

    package androidya.proyecto015;

    import android.app.Activity;

    import android.content.ContentValues;

    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 Proyecto015Activity extends Activity

    {

    private EditText et1,et2,et3,et4;

  • /** Called when the activity is first

    created. */

    @Override

    public void onCreate(Bundle

    savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.editText1);

    et2=(EditText)findViewById(R.id.editText2);

    et3=(EditText)findViewById(R.id.editText3);

    et4=(EditText)findViewById(R.id.editText4);

    }

    public void alta(View v) {

    AdminSQLiteOpenHelper admin=new

    AdminSQLiteOpenHelper(this, "administracion",

    null, 1);

    SQLiteDatabase

    bd=admin.getWritableDatabase();

    String dni=et1.getText().toString();

    String nombre=et2.getText().toString();

    String colegio=et3.getText().toString();

    String nromesa=et4.getText().toString();

    ContentValues registro=new

    ContentValues();

    registro.put("dni",dni );

    registro.put("nombre",nombre );

    registro.put("colegio",colegio );

    registro.put("nromesa",nromesa );

    bd.insert("votantes", null, registro);

    bd.close();

    et1.setText("");

  • et2.setText("");

    et3.setText("");

    et4.setText("");

    Toast.makeText(this, "Se cargaron los

    datos de la persona", Toast.LENGTH_SHORT).show();

    }

    public void consulta(View v) {

    AdminSQLiteOpenHelper admin=new

    AdminSQLiteOpenHelper(this, "administracion",

    null, 1);

    SQLiteDatabase

    bd=admin.getWritableDatabase();

    String dni=et1.getText().toString();

    Cursor fila=bd.rawQuery("select

    nombre,colegio,nromesa from votantes where

    dni="+dni+"",null);

    if (fila.moveToFirst())

    {

    et2.setText(fila.getString(0));

    et3.setText(fila.getString(1));

    et4.setText(fila.getString(2));

    }

    else

    Toast.makeText(this, "No existe una

    persona con dicho dni",

    Toast.LENGTH_SHORT).show();

    bd.close();

    }

    public void baja(View v) {

    AdminSQLiteOpenHelper admin=new

    AdminSQLiteOpenHelper(this, "administracion",

    null, 1);

    SQLiteDatabase

    bd=admin.getWritableDatabase();

  • String dni=et1.getText().toString();

    int cant=bd.delete("votantes",

    "dni="+dni+"",null);

    bd.close();

    et1.setText("");

    et2.setText("");

    et3.setText("");

    et4.setText("");

    if (cant==1)

    Toast.makeText(this, "Se borr la

    persona con dicho documento",

    Toast.LENGTH_SHORT).show();

    else

    Toast.makeText(this, "No existe una

    persona con dicho documento",

    Toast.LENGTH_SHORT).show();

    }

    public void modificacion(View v) {

    AdminSQLiteOpenHelper admin=new

    AdminSQLiteOpenHelper(this, "administracion",

    null, 1);

    SQLiteDatabase

    bd=admin.getWritableDatabase();

    String dni=et1.getText().toString();

    String nombre=et2.getText().toString();

    String colegio=et3.getText().toString();

    String nromesa=et4.getText().toString();

    ContentValues registro=new

    ContentValues();

    registro.put("nombre",nombre);

    registro.put("colegio",colegio);

    registro.put("nromesa",nromesa);

    int cant = bd.update("votantes",

    registro, "dni="+dni, null);

    bd.close();

    if (cant==1)

  • Toast.makeText(this, "se modificaron

    los datos", Toast.LENGTH_SHORT).show();

    else

    Toast.makeText(this, "no existe una

    persona con dicho documento",

    Toast.LENGTH_SHORT).show();

    }

    }

    Como en problemas anteriores definimos los cuatro EditText como atributos y en el mtodo onCreate obtenemos la referencia de los mismos:

    public class Proyecto015Activity extends Activity {

    private EditText et1,et2,et3,et4;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    et1=(EditText)findViewById(R.id.editText1);

    et2=(EditText)findViewById(R.id.editText2);

    et3=(EditText)findViewById(R.id.editText3);

    et4=(EditText)findViewById(R.id.editText4);

    }

    1 - Alta de datos. Cuando se presiona el botn alta se ejecuta el mtodo "alta" recordemos inicializar la propiedad "OnClick" del botn desde la ventana de visualizacin del archivo XML. Lo primero que hacemos en este mtodo es crear un objeto de la clase que planteamos anteriormente y le pasamos al constructor this (referencia del Activity actual), "administracion" (es el nombre de la base de datos que crearemos en el caso que no exista) luego pasamos null y un uno indicando que es la primer versin de la base de datos (en caso que cambiemos la estructura o agreguemos tablas por ejemplo podemos pasar un dos en lugar de un uno para que se ejecute el mtodo onUpgrade donde indicamos la nuestra estructura de la base de datos) Luego de crear un objeto de la clase AdminSqLiteOpenHelper procedemos a crear un objeto de la clase SQLiteDataBase llamando al mtodo getWritableDatabase (la base de datos se abre en modo lectura y escritura). Creamos un objeto de la clase ContentValues y mediante el mtodo put inicializamos todos tos campos a cargar. Seguidamente llamamos al mtodo insert de la clase SQLiteDatabase pasando en el primer parmetro el nombre de la tabla, como segundo parmetro un null y por ltimo el objeto de la clase ContentValues ya inicializado (este mtodo es el que provoca que se inserte una nueva fila en la tabla votantes en la base de datos llamada administracion)

  • Borramos seguidamente los EditText y mostramos un mensaje para que conozca el operador que el alta de datos se efectu en forma correcta: public void alta(View v) {

    AdminSQLiteOpenHelper admin=new AdminSQLiteOpenHelper(this,

    "administracion", null