SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
INSTITUTO TECNOLÓGICO SUPERIOR DE
FELIPE CARRILLO PUERTO
Ingeniería En Sistemas Computacionales
Tópicos avanzados de programación
Informe Técnico unidad 5
Profesor:
Niels Henryk Aranda Cuevas
Integrantes:
Irving Saúl Che Canul
AULA: J-4 GRUPO: B
02/07/14
7 - Control ListView
Introducción:
El control ListView a diferencia del Spinner que se cierra luego de seleccionar un elemento
permanecen visibles varios elementos (se lo utiliza cuando hay que mostrar muchos
elementos); Si la lista no entra en el espacio que hemos fijado para el ListView nos permite
hacer scroll de los mismos. El control ListView se encuentra en la pestaña "Compositive".
Problema:
Disponer un ListView con los nombres de paises de sudamérica. Cuando se seleccione un
país mostrar en un TextView la cantidad de habitantes del país seleccionado.
La interfaz visual a implementar es la siguiente (primero disponemos un TextView
(llamado tv1) y un ListView (llamado listView1)):
Código fuente:
package com.javaya.proyecto006;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private String[] paises = { "Argentina", "Chile", "Paraguay",
"Bolivia",
"Peru", "Ecuador", "Brasil", "Colombia",
"Venezuela", "Uruguay" };
private String[] habitantes = { "40000000", "17000000", "6500000",
"10000000", "30000000", "14000000", "183000000",
"44000000",
"29000000", "3500000" };
private TextView tv1;
private ListView lv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.tv1);
lv1 =(ListView)findViewById(R.id.listView1);
ArrayAdapter <String> adapter = new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, paises);
lv1.setAdapter(adapter);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int
posicion, long id) {
tv1.setText("Población de "+
lv1.getItemAtPosition(posicion) + " es "+ habitantes[posicion]);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if
it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Conclusión:
Como hemos podido observar el listview nos sirve para poder visualizar varios elementos
al mismo tiempo un claro ejemplo es definir los vectores paralelos donde almacenamos los
nombres de paises y en el otro almacenamos la cantidad de habitantes de esos países. Se
definen objetos de tipo TextView y ListView, el método oncreate obtenemos las referencias
de los objetos ya creados, uno de los aprendizajes más significativos fue la utilización del
método setOnItemClicListener el cual se implementó en la clase ListView . el método
OnItemClickListener que nos sirva para las interfaces cuando damos click en la listview, en
el método onItemClick modificamos el contenido del TextView con el nombre del país y la
cantidad de habitantes.
8 - Control ImageButton
Introducción:
Es una clase muy similar al listview llamada ImageButton que tiene la misma filosofía 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 teléfono.
Cuando se presione mostrar en un control TextView el mensaje "Llamando".
Código fuente:
package com.javaya.proyecto007;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.tv1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
//Este método se ejecutará cuando se presione el ImageButton
public void llamar(View view) {
tv1.setText("Llamando");
}
}
Conclusión:
El siguiente problema es muy simple ya que es algo muy similar a lo que hemos estado viendo
netbeens, cuando creamos botones en la interfaz y agregamos una imagen al botón, al momento
de realizar la acción de presionar se debe llamar la imagen en el mismo instante, la parte más
importante es inicializar la propiedad OnClick del objeto ib1 con el nombre del método "llamar"
(recordemos que esto lo hacemos accediendo a la propiedad On Click en la ventana de
"Properties").
9 - Lanzar un segundo "Activity"
Introducción:
Es muy común que una aplicación tenga más de una ventana. Para implementar esto en
Android debemos plantear una segunda clase que también herede de la clase Activity
(tengamos en cuenta que cuando utilizamos ADT automáticamente 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 botón que al ser
presionado muestre otra ventana (Activity) mostrando un TextView con el nombre del
programador de la aplicación y un botón para cerrar la ventana o actividad.
El código fuente de la actividad principal queda:
package com.javaya.proyecto008;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void lanzar(View view) {
Intent i = new Intent(this, AcercaDe.class );
startActivity(i);
}
}
El código fuente de la actividad AcercaDe queda:
package com.javaya.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();
}
}
Conclusión:
El método Activity hace referencia a una nueva interfaz o una nueva ventana de
vizualizacion, se crea el proyecto que fue la primera actividad y luego la segunda clase que
es la que llamamos como la segunda actividad. En este segundo ejercicio se utiliza oncreate
para crear las ventanas y el onclick para los botones. También agremos un botón al final y
el método finish () que tiene como objetivo cerrar el programa y liberar espacio de
memoria.
10 - Lanzar un segundo "Activity" y pasar parámetros.
Introducción:
Un programa puede tener más de una ventana representando cada ventana con una clase
que hereda de Activity.
Una situación muy común es que la primera ventana necesite enviar datos a la segunda para
que a partir de estos proceda a efectuar una acción.
Problema:
Confeccionar un programa que solicite el ingrese de una dirección de un sitio web y
seguidamente abrir una segunda ventana que muestre dicha página.
El código fuente de esta Activity es:
package com.androidya.proyecto010;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.et1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void ejecutar(View view) {
Intent i = new Intent(this, Actividad2.class);
i.putExtra("direccion", et1.getText().toString());
startActivity(i);
}
}
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 botón derecho del mouse sobre el paquete com.androidya.proyecto010)
Al nombre de la clase la llamamos Actividad2 y debemos especificar que
hereda de la clase android.app.Activity
Ahora tenemos que modificar el archivo Java generado agregando del método
onCreate con esto:
package com.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
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad2);
webView1 = (WebView) findViewById(R.id.webView1);
Bundle bundle = getIntent().getExtras();
webView1.loadUrl("http://" + bundle.getString("direccion"));
}
public void finalizar(View view) {
finish();
}
}
Conclusión:
Este ejercicio es es parecido al anterior a diferencia de que ahora usamos el webview para
poder acceder a internet desde el apk y los valores agregados a la primera activity para
poder pasarlos a la segunda activity se usó el método getExtras(), podemos notar que
existen líneas de código heredadas para la reutilización de las mismas.
14 - Almacenamiento en una base de datos SQLite
Introducción:
Una 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
pequeños, como Android. Las ventajas que presenta utilizar SQLite es que no requiere
configuración, no tiene un servidor de base de datos ejecutándose en un proceso separado y
es relativamente simple su empleo.
Problema:
Confeccionar un programa que permita almacenar los datos de votantes de una elección.
Crear la tabla votantes y definir los campos dni (documento de identidad), nombre del
votante, colegio donde vota y número 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 - Modificación de datos.
En nuestro problema implementaremos una nueva clase llamada
AdminSQLiteOpenHelper que herede de la clase SQLiteOpenHelper:
package com.javaya.proyecto015;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
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)");
}
}
Ahora veamos la otra clase que implementará las altas, bajas,
modificaciones y consultas:
package com.javaya.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.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et1, et2, et3, et4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_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);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
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();
}
}
Conclusión:
Una base de datos es una colección de datos organizados, en android encontramos el
sistema de sqlite esta herramienta en Android es muy fácil y sencilla para utilizar, además
como ya se había mencionado es nativa de android, en sqlite encontramos el método
SQLiteOpenHelper que es el que nos permite crear la base de datos, usamos ahora los métodos
onCreate y onUpgrade. Como ya vimos oncreate nos sirve para crear un constructor y onupgrade
nos sirve para actualizarlas.

Contenu connexe

Tendances

Interfaces de usuario con PyGTK
Interfaces de usuario con PyGTKInterfaces de usuario con PyGTK
Interfaces de usuario con PyGTKFco Javier Lucena
 
Taller Python Gtk Glade
Taller Python Gtk GladeTaller Python Gtk Glade
Taller Python Gtk Gladecampus party
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuarioaleja0940
 
Swing
SwingSwing
SwingEPN
 
Desarrollo android - 4 - arquitectura de aplicación
Desarrollo android  - 4 - arquitectura de aplicaciónDesarrollo android  - 4 - arquitectura de aplicación
Desarrollo android - 4 - arquitectura de aplicaciónEmilio Aviles Avila
 
Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5Carlos Blanco
 
De los temas de android (introduccion-10)
De los temas de android (introduccion-10)De los temas de android (introduccion-10)
De los temas de android (introduccion-10)equipotresamp
 
Adelanto de los temas de android (introduccion-10)
Adelanto de los temas de android (introduccion-10)Adelanto de los temas de android (introduccion-10)
Adelanto de los temas de android (introduccion-10)equipotresamp
 
Investigacion para agregar una imagen a eclipse
Investigacion para agregar una imagen a eclipseInvestigacion para agregar una imagen a eclipse
Investigacion para agregar una imagen a eclipseLucero De La Cruz
 
Librería swing java
Librería swing javaLibrería swing java
Librería swing javapgpg2006
 
Eclipse para novatos java
Eclipse para novatos javaEclipse para novatos java
Eclipse para novatos javamartaferrari
 
Objetivo interfas a codigo
Objetivo interfas a codigoObjetivo interfas a codigo
Objetivo interfas a codigoRobert Wolf
 

Tendances (20)

Interfaces de usuario con PyGTK
Interfaces de usuario con PyGTKInterfaces de usuario con PyGTK
Interfaces de usuario con PyGTK
 
Practicasbasicasparaandroid 120112060404-phpapp02
Practicasbasicasparaandroid 120112060404-phpapp02Practicasbasicasparaandroid 120112060404-phpapp02
Practicasbasicasparaandroid 120112060404-phpapp02
 
Taller Python Gtk Glade
Taller Python Gtk GladeTaller Python Gtk Glade
Taller Python Gtk Glade
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
Swing
SwingSwing
Swing
 
Desarrollo android - 4 - arquitectura de aplicación
Desarrollo android  - 4 - arquitectura de aplicaciónDesarrollo android  - 4 - arquitectura de aplicación
Desarrollo android - 4 - arquitectura de aplicación
 
Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5
 
De los temas de android (introduccion-10)
De los temas de android (introduccion-10)De los temas de android (introduccion-10)
De los temas de android (introduccion-10)
 
Swing
SwingSwing
Swing
 
Adelanto de los temas de android (introduccion-10)
Adelanto de los temas de android (introduccion-10)Adelanto de los temas de android (introduccion-10)
Adelanto de los temas de android (introduccion-10)
 
Java
JavaJava
Java
 
Android bootcamp 101 v2.0
Android bootcamp 101 v2.0Android bootcamp 101 v2.0
Android bootcamp 101 v2.0
 
Swin01
Swin01Swin01
Swin01
 
Investigacion para agregar una imagen a eclipse
Investigacion para agregar una imagen a eclipseInvestigacion para agregar una imagen a eclipse
Investigacion para agregar una imagen a eclipse
 
Tutorial eclipse
Tutorial eclipseTutorial eclipse
Tutorial eclipse
 
Librería swing java
Librería swing javaLibrería swing java
Librería swing java
 
File
FileFile
File
 
Eclipse para novatos java
Eclipse para novatos javaEclipse para novatos java
Eclipse para novatos java
 
APLICACIONES CREADAS PARA ANDROID
APLICACIONES CREADAS PARA ANDROIDAPLICACIONES CREADAS PARA ANDROID
APLICACIONES CREADAS PARA ANDROID
 
Objetivo interfas a codigo
Objetivo interfas a codigoObjetivo interfas a codigo
Objetivo interfas a codigo
 

En vedette

global_executive_mba_sdabocconi
global_executive_mba_sdabocconiglobal_executive_mba_sdabocconi
global_executive_mba_sdabocconiMario Riccio
 
Comenzar a vivir descubrir el mundo
Comenzar a vivir descubrir el mundoComenzar a vivir descubrir el mundo
Comenzar a vivir descubrir el mundoJosef Carel
 
Risk and Return: Striking the Right Balance (Whitepaper)
Risk and Return: Striking the Right Balance (Whitepaper)Risk and Return: Striking the Right Balance (Whitepaper)
Risk and Return: Striking the Right Balance (Whitepaper)NAFCU Services Corporation
 
Ross Glick, CEO, iNDELIBLE
Ross Glick, CEO, iNDELIBLERoss Glick, CEO, iNDELIBLE
Ross Glick, CEO, iNDELIBLEKGS Global
 
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand ChampionsArchersan
 
Knee injuries & Surgical Inteventions
Knee injuries & Surgical Inteventions Knee injuries & Surgical Inteventions
Knee injuries & Surgical Inteventions MedRisk
 
2013 jeb homes portfolio
2013 jeb homes portfolio2013 jeb homes portfolio
2013 jeb homes portfolioJonathan Brandt
 
Webinar: Promoting America State by State: Email Expert Review of Fifty State...
Webinar: Promoting America State by State: Email Expert Review of Fifty State...Webinar: Promoting America State by State: Email Expert Review of Fifty State...
Webinar: Promoting America State by State: Email Expert Review of Fifty State...One to One
 
Departamento De Computacion
Departamento De ComputacionDepartamento De Computacion
Departamento De ComputacionMariela
 
54785 conviviendo en el aula de clase
54785   conviviendo en el aula de clase54785   conviviendo en el aula de clase
54785 conviviendo en el aula de claseangelmanuel22
 
Manual de usuario Lambretta200 jet
Manual de usuario Lambretta200 jetManual de usuario Lambretta200 jet
Manual de usuario Lambretta200 jetRutersdeMallorca
 

En vedette (20)

global_executive_mba_sdabocconi
global_executive_mba_sdabocconiglobal_executive_mba_sdabocconi
global_executive_mba_sdabocconi
 
Comenzar a vivir descubrir el mundo
Comenzar a vivir descubrir el mundoComenzar a vivir descubrir el mundo
Comenzar a vivir descubrir el mundo
 
Memoria
MemoriaMemoria
Memoria
 
La Biblioteca 2.0
La Biblioteca 2.0La Biblioteca 2.0
La Biblioteca 2.0
 
Boletín XXV junio 2016
Boletín XXV junio 2016Boletín XXV junio 2016
Boletín XXV junio 2016
 
Risk and Return: Striking the Right Balance (Whitepaper)
Risk and Return: Striking the Right Balance (Whitepaper)Risk and Return: Striking the Right Balance (Whitepaper)
Risk and Return: Striking the Right Balance (Whitepaper)
 
Ross Glick, CEO, iNDELIBLE
Ross Glick, CEO, iNDELIBLERoss Glick, CEO, iNDELIBLE
Ross Glick, CEO, iNDELIBLE
 
Argiteria auditoria A3 Maketazioa
Argiteria auditoria A3 MaketazioaArgiteria auditoria A3 Maketazioa
Argiteria auditoria A3 Maketazioa
 
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions
2015 NCET Expo: Paul Klein - How To Turn Your Customers Into Brand Champions
 
Knee injuries & Surgical Inteventions
Knee injuries & Surgical Inteventions Knee injuries & Surgical Inteventions
Knee injuries & Surgical Inteventions
 
Agenda lola salmerón el café de las tres #febrerotic2015 #apassionat matarranya
Agenda  lola salmerón el café de las tres #febrerotic2015 #apassionat matarranyaAgenda  lola salmerón el café de las tres #febrerotic2015 #apassionat matarranya
Agenda lola salmerón el café de las tres #febrerotic2015 #apassionat matarranya
 
2013 jeb homes portfolio
2013 jeb homes portfolio2013 jeb homes portfolio
2013 jeb homes portfolio
 
Raúl Rueda
Raúl RuedaRaúl Rueda
Raúl Rueda
 
Time4 mobi#1
Time4 mobi#1Time4 mobi#1
Time4 mobi#1
 
DT Downtown
DT   DowntownDT   Downtown
DT Downtown
 
Webinar: Promoting America State by State: Email Expert Review of Fifty State...
Webinar: Promoting America State by State: Email Expert Review of Fifty State...Webinar: Promoting America State by State: Email Expert Review of Fifty State...
Webinar: Promoting America State by State: Email Expert Review of Fifty State...
 
Departamento De Computacion
Departamento De ComputacionDepartamento De Computacion
Departamento De Computacion
 
MiM Employment Report 2014
MiM Employment Report 2014MiM Employment Report 2014
MiM Employment Report 2014
 
54785 conviviendo en el aula de clase
54785   conviviendo en el aula de clase54785   conviviendo en el aula de clase
54785 conviviendo en el aula de clase
 
Manual de usuario Lambretta200 jet
Manual de usuario Lambretta200 jetManual de usuario Lambretta200 jet
Manual de usuario Lambretta200 jet
 

Similaire à Informe tecnico unidad 5 tap

Presentación11
Presentación11Presentación11
Presentación11Azul AO
 
Presentación11
Presentación11Presentación11
Presentación11conejita98
 
Practica division de_dos_numeros
Practica division de_dos_numerosPractica division de_dos_numeros
Practica division de_dos_numerosANTHONY OCHOA
 
Practica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numerosPractica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numerosANTHONY OCHOA
 
Tutorial de como hacer operaciones fáciles en eclipse
Tutorial de como hacer operaciones fáciles en eclipseTutorial de como hacer operaciones fáciles en eclipse
Tutorial de como hacer operaciones fáciles en eclipseyamary sanchez
 
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidTutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidLuis Ernesto Castillo Alfaro
 
CLASE MUESTRA.pptx
CLASE MUESTRA.pptxCLASE MUESTRA.pptx
CLASE MUESTRA.pptxAdrinGarca77
 
Taller androidparte2
Taller androidparte2Taller androidparte2
Taller androidparte2ffojeda
 
Como insertar una imagen en eclipse
Como insertar una imagen en eclipseComo insertar una imagen en eclipse
Como insertar una imagen en eclipsejaquiiMc
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...leofishman
 
Laboratorio3 check box
Laboratorio3 check boxLaboratorio3 check box
Laboratorio3 check boxMiguel Jc
 
Adriana Presentación 9
Adriana Presentación 9Adriana Presentación 9
Adriana Presentación 9Azul AO
 
Presentación 9
Presentación 9Presentación 9
Presentación 9Azul AO
 
Presentación 9
Presentación 9Presentación 9
Presentación 9conejita98
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 

Similaire à Informe tecnico unidad 5 tap (20)

Presentación11
Presentación11Presentación11
Presentación11
 
Presentación11
Presentación11Presentación11
Presentación11
 
Android
AndroidAndroid
Android
 
Practica division de_dos_numeros
Practica division de_dos_numerosPractica division de_dos_numeros
Practica division de_dos_numeros
 
Practica 6
Practica 6Practica 6
Practica 6
 
Practica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numerosPractica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numeros
 
Tutorial de como hacer operaciones fáciles en eclipse
Tutorial de como hacer operaciones fáciles en eclipseTutorial de como hacer operaciones fáciles en eclipse
Tutorial de como hacer operaciones fáciles en eclipse
 
Hola mundo
Hola mundoHola mundo
Hola mundo
 
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidTutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
 
CLASE MUESTRA.pptx
CLASE MUESTRA.pptxCLASE MUESTRA.pptx
CLASE MUESTRA.pptx
 
Clases de Programación Android
Clases de Programación AndroidClases de Programación Android
Clases de Programación Android
 
Taller androidparte2
Taller androidparte2Taller androidparte2
Taller androidparte2
 
Como insertar una imagen en eclipse
Como insertar una imagen en eclipseComo insertar una imagen en eclipse
Como insertar una imagen en eclipse
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
 
Laboratorio3 check box
Laboratorio3 check boxLaboratorio3 check box
Laboratorio3 check box
 
Adriana Presentación 9
Adriana Presentación 9Adriana Presentación 9
Adriana Presentación 9
 
Presentación 9
Presentación 9Presentación 9
Presentación 9
 
Presentación 9
Presentación 9Presentación 9
Presentación 9
 
Practica 6
Practica 6Practica 6
Practica 6
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 

Plus de Irving Che

Investigación documental 3 u
Investigación documental 3 uInvestigación documental 3 u
Investigación documental 3 uIrving Che
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 finalIrving Che
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2Irving Che
 
Informe tecnico unidad 3
Informe tecnico unidad 3Informe tecnico unidad 3
Informe tecnico unidad 3Irving Che
 
Informe tecnico unidad 4
Informe tecnico unidad 4Informe tecnico unidad 4
Informe tecnico unidad 4Irving Che
 
Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación Irving Che
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionIrving Che
 
Unidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionUnidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionIrving Che
 
Tipos de eventos
Tipos de eventosTipos de eventos
Tipos de eventosIrving Che
 
Electrónica analogica
Electrónica analogicaElectrónica analogica
Electrónica analogicaIrving Che
 

Plus de Irving Che (10)

Investigación documental 3 u
Investigación documental 3 uInvestigación documental 3 u
Investigación documental 3 u
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 final
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2
 
Informe tecnico unidad 3
Informe tecnico unidad 3Informe tecnico unidad 3
Informe tecnico unidad 3
 
Informe tecnico unidad 4
Informe tecnico unidad 4Informe tecnico unidad 4
Informe tecnico unidad 4
 
Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Unidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionUnidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacion
 
Tipos de eventos
Tipos de eventosTipos de eventos
Tipos de eventos
 
Electrónica analogica
Electrónica analogicaElectrónica analogica
Electrónica analogica
 

Informe tecnico unidad 5 tap

  • 1. INSTITUTO TECNOLÓGICO SUPERIOR DE FELIPE CARRILLO PUERTO Ingeniería En Sistemas Computacionales Tópicos avanzados de programación Informe Técnico unidad 5 Profesor: Niels Henryk Aranda Cuevas Integrantes: Irving Saúl Che Canul AULA: J-4 GRUPO: B 02/07/14
  • 2. 7 - Control ListView Introducción: El control ListView a diferencia del Spinner que se cierra luego de seleccionar un elemento permanecen visibles varios elementos (se lo utiliza cuando hay que mostrar muchos elementos); Si la lista no entra en el espacio que hemos fijado para el ListView nos permite hacer scroll de los mismos. El control ListView se encuentra en la pestaña "Compositive". Problema: Disponer un ListView con los nombres de paises de sudamérica. Cuando se seleccione un país mostrar en un TextView la cantidad de habitantes del país seleccionado. La interfaz visual a implementar es la siguiente (primero disponemos un TextView (llamado tv1) y un ListView (llamado listView1)): Código fuente: package com.javaya.proyecto006; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private String[] paises = { "Argentina", "Chile", "Paraguay", "Bolivia", "Peru", "Ecuador", "Brasil", "Colombia", "Venezuela", "Uruguay" }; private String[] habitantes = { "40000000", "17000000", "6500000", "10000000", "30000000", "14000000", "183000000", "44000000", "29000000", "3500000" }; private TextView tv1; private ListView lv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1=(TextView)findViewById(R.id.tv1); lv1 =(ListView)findViewById(R.id.listView1);
  • 3. ArrayAdapter <String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, paises); lv1.setAdapter(adapter); lv1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int posicion, long id) { tv1.setText("Población de "+ lv1.getItemAtPosition(posicion) + " es "+ habitantes[posicion]); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } Conclusión: Como hemos podido observar el listview nos sirve para poder visualizar varios elementos al mismo tiempo un claro ejemplo es definir los vectores paralelos donde almacenamos los nombres de paises y en el otro almacenamos la cantidad de habitantes de esos países. Se definen objetos de tipo TextView y ListView, el método oncreate obtenemos las referencias de los objetos ya creados, uno de los aprendizajes más significativos fue la utilización del método setOnItemClicListener el cual se implementó en la clase ListView . el método OnItemClickListener que nos sirva para las interfaces cuando damos click en la listview, en el método onItemClick modificamos el contenido del TextView con el nombre del país y la cantidad de habitantes. 8 - Control ImageButton Introducción: Es una clase muy similar al listview llamada ImageButton que tiene la misma filosofía de manejo con la diferencia que puede mostrar una imagen en su superficie.
  • 4. Problema: Disponer un objeto de la clase ImageButton que muestre una imagen de un teléfono. Cuando se presione mostrar en un control TextView el mensaje "Llamando". Código fuente: package com.javaya.proyecto007; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1=(TextView)findViewById(R.id.tv1); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } //Este método se ejecutará cuando se presione el ImageButton public void llamar(View view) { tv1.setText("Llamando"); } } Conclusión: El siguiente problema es muy simple ya que es algo muy similar a lo que hemos estado viendo netbeens, cuando creamos botones en la interfaz y agregamos una imagen al botón, al momento de realizar la acción de presionar se debe llamar la imagen en el mismo instante, la parte más importante es inicializar la propiedad OnClick del objeto ib1 con el nombre del método "llamar" (recordemos que esto lo hacemos accediendo a la propiedad On Click en la ventana de "Properties").
  • 5. 9 - Lanzar un segundo "Activity" Introducción: Es muy común que una aplicación tenga más de una ventana. Para implementar esto en Android debemos plantear una segunda clase que también herede de la clase Activity (tengamos en cuenta que cuando utilizamos ADT automáticamente 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 botón que al ser presionado muestre otra ventana (Activity) mostrando un TextView con el nombre del programador de la aplicación y un botón para cerrar la ventana o actividad. El código fuente de la actividad principal queda: package com.javaya.proyecto008; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void lanzar(View view) { Intent i = new Intent(this, AcercaDe.class ); startActivity(i); } }
  • 6. El código fuente de la actividad AcercaDe queda: package com.javaya.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(); } } Conclusión: El método Activity hace referencia a una nueva interfaz o una nueva ventana de vizualizacion, se crea el proyecto que fue la primera actividad y luego la segunda clase que es la que llamamos como la segunda actividad. En este segundo ejercicio se utiliza oncreate para crear las ventanas y el onclick para los botones. También agremos un botón al final y el método finish () que tiene como objetivo cerrar el programa y liberar espacio de memoria. 10 - Lanzar un segundo "Activity" y pasar parámetros. Introducción: Un programa puede tener más de una ventana representando cada ventana con una clase que hereda de Activity. Una situación muy común es que la primera ventana necesite enviar datos a la segunda para que a partir de estos proceda a efectuar una acción. Problema: Confeccionar un programa que solicite el ingrese de una dirección de un sitio web y seguidamente abrir una segunda ventana que muestre dicha página.
  • 7. El código fuente de esta Activity es: package com.androidya.proyecto010; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; public class MainActivity extends Activity { private EditText et1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et1 = (EditText) findViewById(R.id.et1); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void ejecutar(View view) { Intent i = new Intent(this, Actividad2.class); i.putExtra("direccion", et1.getText().toString()); startActivity(i); } } 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 botón derecho del mouse sobre el paquete com.androidya.proyecto010) Al nombre de la clase la llamamos Actividad2 y debemos especificar que hereda de la clase android.app.Activity Ahora tenemos que modificar el archivo Java generado agregando del método onCreate con esto: package com.androidya.proyecto010; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.webkit.WebView;
  • 8. public class Actividad2 extends Activity { private WebView webView1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.actividad2); webView1 = (WebView) findViewById(R.id.webView1); Bundle bundle = getIntent().getExtras(); webView1.loadUrl("http://" + bundle.getString("direccion")); } public void finalizar(View view) { finish(); } } Conclusión: Este ejercicio es es parecido al anterior a diferencia de que ahora usamos el webview para poder acceder a internet desde el apk y los valores agregados a la primera activity para poder pasarlos a la segunda activity se usó el método getExtras(), podemos notar que existen líneas de código heredadas para la reutilización de las mismas. 14 - Almacenamiento en una base de datos SQLite Introducción: Una 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 pequeños, como Android. Las ventajas que presenta utilizar SQLite es que no requiere configuración, no tiene un servidor de base de datos ejecutándose en un proceso separado y es relativamente simple su empleo. Problema: Confeccionar un programa que permita almacenar los datos de votantes de una elección. Crear la tabla votantes y definir los campos dni (documento de identidad), nombre del votante, colegio donde vota y número 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
  • 9. 4 - Modificación de datos. En nuestro problema implementaremos una nueva clase llamada AdminSQLiteOpenHelper que herede de la clase SQLiteOpenHelper: package com.javaya.proyecto015; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; 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)"); } } Ahora veamos la otra clase que implementará las altas, bajas, modificaciones y consultas: package com.javaya.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.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et1, et2, et3, et4;
  • 10. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_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); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } 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();
  • 11. 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(); } }
  • 12. Conclusión: Una base de datos es una colección de datos organizados, en android encontramos el sistema de sqlite esta herramienta en Android es muy fácil y sencilla para utilizar, además como ya se había mencionado es nativa de android, en sqlite encontramos el método SQLiteOpenHelper que es el que nos permite crear la base de datos, usamos ahora los métodos onCreate y onUpgrade. Como ya vimos oncreate nos sirve para crear un constructor y onupgrade nos sirve para actualizarlas.