Documente Academic
Documente Profesional
Documente Cultură
DESARROLLO
DE SOFTWARE
MANUAL DE APRENDIZAJE
DESARROLLO DE
APLICACIONES MÓVILES
CÓDIGO: 89001737
Profesional Técnico
DESARROLLO DE APLICACIONES MÓVILES
CONTENIDO Nº PAG
I. INTRODUCCIÓN A ANDROID. 5
II. INSTALACIÓN Y CONFIGURACIÓN DE ECLIPSE. 18
III. ENTORNO DE DESARROLLO – ANDROID - GUI. 34
IV. CREACIÓN DE UNA APLICACIÓN ANDROID. 40
V. CONFIGURACIÓN Y PROGRAMACIÓN DE CONTROLES
44
BÁSICOS.
VI. CAPTURANDO Y MANEJANDO EVENTOS DE USUARIO. 63
VII. INTENTS E INTENS FILTERS. 72
VIII. ANIMACIÓN Y DISEÑO DE MENUS. 76
IX. GEOLOCALIZACIÓN Y MAPAS. 80
X. ALMACENAMIENTO Y RECUPERACIÓN DE DATOS - SQLITE. 82
XI. SERVICIOS DE RED. 113
XII. SERVICIOS WEB ANDROID CON PHP. 118
I. INTRODUCCIÓN A ANDROID.
OPERACIONES:
- Conocer el Sistema Operativo Android.
- Identificar las diferencias entre versiones de Android.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i3 o superior.
- Sistema operativo Windows.
QUÉ ES ANDROID.
El sistema operativo Android es un sistema basado en muchas de las
características que tiene linux este sistema operativo tiene basado su núcleo
en Linux. Android fue diseñado en sus inicios principalmente para todos los
dispositivos móviles como Tablets y Smartphone pero en la actualidad este
sistema operativo ha tomado gran poder en la tecnología siendo utilizado no
solo para móviles sino también para cualquier tipo de dispositivo electrónico
como lo puede ser un reloj, un televisor, una radio, un autorradio, una lavadora,
un microondas, etc.
Android fue lanzado en el año 2007 junto a la fundación del Open Handset
Alliance (unión de las mejores empresas del mundo que lideran el mercado de
tecnologías en general) la cual le ayuda en avanzar para sus estándares de
desarrollo.
HISTORIA DE ANDROID.
Uno de los primeros trabajos importantes que tuvo Andy Rubin fue de trabajar
como ingeniero de la gran empresa Apple, es ahí donde comenzó con los
proyectos para móviles, de la empresa Apple surgió una empresa llamada
General Magic y es con esta empresa donde comenzó con el desarrollo de un
proyecto llamado Magic Cup lo que en ese entonces sería un sistema operativo
móvil, sin embargo los teléfonos de esas épocas no tenían la suficiente
tecnología como para que puedan ser instalado un S.O. con las características
de un S.O. Inteligente por lo tanto el proyecto tuvo que ser cerrado.
Luego Andy se unió a Artemis Research, una empresa que también tenía miras
a creas un sistema operativo para móviles inteligentes, pero esta empresa
termino comprada por Microsoft desplazando una vez más a Andy Rubin a la
quiebra.
Luego en el 2003 Andy Rubin formo otra empresa llamada Android Inc., en esa
época y después de tanta experiencia en telefonía móvil formo una empresa
con la tecnología necesaria para crear los modernos y potentes sistemas
operativos con los que nos vemos conectados hoy en día.
Android.
Este sistema operativo es aquel que lidera el mercado ya que cuenta con una
gran popularidad en el ámbito móvil, su cuota en el mercado es del 83% y una
de sus principales características es que es un software libre, es decir Open
Source, no tiene una licencia por la cual se tenga que pagar. Este gran sistema
operativo es de Google y está disponible para cualquier creador o fabricante
interesado en utilizar dicho sistema operativo.
Una de las grandes ventajas con las que cuenta Android es la gran cantidad de
aplicaciones gratuitas con las que cuenta el sistemas operativo Android, estas
aplicaciones se encuentran en la tienda virtual y pueden ser descargadas por
cualquier usuarios que cuente con sistema operativo Android.
Sin embargo, un sistema operativo cerrado como lo es IOS ofrece una versión
de sistema operativo mucho más estable y seguro ya que cuenta con la
garantía del fabricante que lo creó.
Windows Phone
Windows Phone es un sistema operativo el cual
ha ingresado al mercado tiempo después que
sus dos antecesores y líderes en el mercado
como lo son Android y IOS, este sistema
operativo también es un sistema operativo
cerrado y cuenta con poca cuota de usuarios en
el mercado, según estudios de fines del 2014
solo contaba con 3% de la cuota de usuarios del mercado de Smartphones,
Microsoft está haciendo muchos esfuerzos por alcanzar la cima de las ventas y
los usuarios incluso a formado una alianza con la empresa Nokia la cual le ha
permitido hacerse mas conocida ya que los móviles Nokia vienen ya instalados
con este S.O. (según el modelo).
Windows phone cuenta con un diseño totalmente distinto a los dos sistemas
mencionados, este destaca su pantalla de inicio la cual ofrece notificaciones de
las App de una forma más sencilla y mucho más limpia que las dos anteriores.
Si se puede sacar un punto a su favor es que Windows phone cuenta con una
interfaz de usuario muy amigable muy parecido al uso de una pc convencional
con sistema operativo Windows.
Este sistema operativo móvil cuenta con un gran número de App disponibles en
el mercado, aunque no tantas como lo son sus grandes competidores como
Android e iOS, Windows phone cuenta con más de 300 000 App en su tienda
virtual, además ofrece sus propias aplicaciones como los son Skye, OneDrive o
Xbox.
Firefox OS
Firefox OS es un sistema operativo basado en
Tecnología Web con el famoso lenguaje de
programación HTML5, este sistema operativo cuenta con
núcleo Linux y al igual que Android es Open Source es
decir software libre. Este sistema operativo fue
Desarrollado por Mozilla Corporatión con la ayuda y
colaboración de muchas empresas de telefonía móvil.
La gran ventaja que tiene este sistema operativo móvil frente a otros sistemas
operativos es la facilidad de que sus aplicaciones sean usadas por cualquier
proveedor de sistemas operativo móvil ya que cuenta con tecnologías HTML5,
JavaScript y Css esto hace que cumpla con las condiciones que cumple un
navegador pero utilizando los recursos del móvil, permitiendo el uso de las
aplicaciones en cualquier tipo de sistema operativo.
BLACKBERRY
El sistema operativo BlackBerry fue en sus
inicios conocido como RIM el cual es sus
mejores épocas fue uno de los líderes en el
mercado móvil, en la actualidad Blackberry
no pasa por uno de sus mejores momentos
ya que la los sistemas operativos como Android e iOS han tomado posesión del
mercado móvil, desplazando a BlackBerry casi fuera del mercado de móviles.
Acostumbrado a ofrecer terminales con teclado físico, el paso a las pantallas
táctiles no fue uno de sus mejores opciones quedando así desplazado por los
VERSIONES DE ANDROID.
Este cambio fue reforzado aún más ya que la gran empresa de móviles
Motorola lanzo una importante campaña de marketing haciendo aún más
conocido los sistemas operativos.
Se observa también que por primera vez se muestran los fondos animados, es
decir imágenes con movimiento para los fondos de las pantallas de los
celulares, est hice ue se vuelva una versión muy atractiva y es mas, hasta el
dia de hoy se pueden observar móviles que tienen ese sistema operativo.
Kitkat 4.4
En esta versión los componentes principales de Android son
recortados para reducir el uso de la memoria del equipo, y se
crea una API nueva la cual permite trabajar las aplicaciones
con un uso menor de memoria.
ARQUITECTURA ANDROID.
El núcleo de Linux.
Android tiene como núcleo al sistema operativo Linux versión la cual es una
capa que proporciona los servicios necesarios para brindar un manejo de
memoria adecuado, una seguridad muy buena y manejo de protocolos y drivers
al mayor alto nivel.
Runtime de Android.
El Runtime se basa en una máquina virtual la cual utiliza Java para poder
utilizar sus funciones. En vista de que los sistemas operativos Android corren
en dispositivos móviles los cuales no cuentan con la memoria suficiente como
para que ejecute una máquina virtual de Java, Android tuvo que crear su propia
máquina virtual basada en Java su nombre es Dalvik la cual responde a las
acciones del móvil de una mejor manera y se adapta a cualquier dispositivo
móvil.
Librerías nativas.
Android incluye una serie de librerías las cuales son usadas sin necesidad de
archivos adicionales o instalación de algún Framework. A continuación
mostramos algunas de las librerías que se incluyen en el sistema operativo:
- System C library.
- Media Framework.
- Surface Manager: permite el trabajo con gráficos 2D y 3D.
- WebKit: Permite trabajar con los modernos navegadores web.
- SGL: motor de gráficos 2D.
- Librerías 3D: Permite trabajar con proyecciones 3D.
- FreeType: fuentes en bitmap y renderizado vectorial.
- SQLite: Potente administrador de base de datos que viene incluido en el
paquete de de Android.
- SSL: proporciona servicios de encriptación.
Entorno de aplicación.
Android proporciona una plataforma muy amigable y muy innovadora la cual
nos permite trabajar con todos los recursos del móvil como son el caso de
Aplicaciones:
En este nivel se encuentran todas las aplicaciones instaladas en el dispositivo
móvil, todas estas son controladas y corridas por la máquina virtual Dalvik.
OPERACIONES:
- Conocer los tipos de descarga de Android Studio y el SDK Manager.
- Conocer los diferentes tipos y diferencias de las máquinas virtuales que se
pueden configurar.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i3 o superior.
- Sistema operativo Windows con Android Studio instalado.
ANDROID STUDIO.
Una de las grandes ventajas que tiene el programa Android Studio es que nos
permite ver los cambios conforme se van desarrollado , es decir en directo,
además tenemos que Android Studio permite la integración con Google Cloud
Messaging, esto hace que el desarrollador no tenga que salir del programa.
Características:
- Renderización y pruebas en tiempo real.
- Soporte de desarrollo en la construcción basada en Gradle.
- Refactorización especifica de Android y arreglos rápidos.
- Plantillas para crear diseños comunes de Android y otros componentes.
Click en next.
Clic en NEXT.
Ahora, hay que definir el JAVA_HOME, como variable de sistema. Para ello
Damos clic derecho sobre “Este Equipo” (o icono similar, antes se llamaba
“mi pc”) y escogemos PROPIEDADES.
La ventana anterior muestra donde colocar los archivos del Android studio y
la segunda donde colocar las librerías del SDK, se pueden cambiar las rutas
que vienen por defecto o podemos dejarlas hay, en cualquiera de los casos
NEXT.
A todas las opciones de la primera lista, dar clic en los 2 primeros checks de
la segunda lista (CONTROL TOTAL, MODIFICAR), luego clic en ACEPTAR.
1. Abrir Android Studio y crear un nuevo proyecto. Click en File – New Project.
Los controles serán arrastrados hacia la pantalla del móvil (layout), una vez
colocados en las posiciones correctas se procederá a cambiar el contenido de
los textos dándole doble clic sobre cada uno de los controles.
1. Utilizando Android Studio crear una aplicacion la cual muestre los datos de la
carrera que esta cursando (Nombre de la carrera, Ciclo, Institucion
Educativa, etc), solo se hara uso del control textView.
OPERACIONES:
- Conocer y configurar el entorno de trabajo de un proyecto Android.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i3 o superior.
- Sistema operativo Windows con Android Studio instalado.
Carpeta SRC.
En esta carpeta se encuentran las clases llaves la cual contiene el código
fuente del proyecto, además contiene el código de la interfaz gráfica. Además
al momento de que Android Studio crea su proyecto, este crea una pantalla
llamada activity_main la cual se enlaza automáticamente con el proyecto
mediante la clase.
Carpeta RES.
Esta carpeta contiene todos los recursos que necesita el proyecto tal es el caso
de imágenes, sonidos, videos, archivos de texto, etc. De acuerdo al recurso
este se alojará en una subcarpeta la cual estará creada dentro de la carpeta
RES y almacenará un tipo de archivo específico. Todos los archivos tendrán
una ubicación específica de acuerdo a su tipo.
Durante el desarrollo de la
aplicación se utilizará demasiado
en entorno de desarrollo gráfico, ya
que es aquí donde se manipulará el
aspecto que tendrán las pantallas
del proyecto. Existe otra alternativa
de trabajar el diseño de la interfaz y
es mediante el código XML, todas
las pantallas tienen asociados un
código llamado XML. En este caso, el XML asociado sería el siguiente:
Este tipo de interfaz de código puede resultar más complicado, pero en realidad
el utilizar este tipo de ventanas se hace más sencillo.
Carpeta GEN.
Cada vez que se ejecuta o compila un proyecto, la máquina genera
automáticamente identificaciones y códigos para cada uno de los elementos y
cada una de las partes del código para su identificación; por lo tanto, en la
carpeta GEN se encuentra todo el registro de elementos con los que cuenta la
aplicación.
Carpeta ASSETS.
Esta carpeta contiene todos los archivos auxiliares que pueda necesitar la
aplicación o proyecto que se está creando (y que se incluirán en su propio
paquete), como por ejemplo ficheros de configuración, archivos adicionales,
archivos planos, música, videos, etc.
Cada vez que se quiere acceder a los recursos con los que cuenta esta carpeta
se hace a través de un comando denominado ASSETMANAGER que significa
administrador de recursos, este comando permitirá acceder a todos los
recursos y archivos con los que cuenta el sistema.
Carpeta BIN.
En esta carpeta se encuentran los archivos compilados de la aplicación y otros
fiches de tipo auxiliar. Esta carpeta es una carpeta que por lo general no se
toca ya que pueden eliminar archivos necesarios para la compilación o
ejecución del proyecto.
Carpeta LIBS
En esta carpeta se encontrarán lbrerías adicionales con los que trabajará el
proyecto, por lo general, son archivos de tipo JAR.
FICHERO ANDROIDMANIFEST.XML.
Para poder crear una interfaz lo primero que se tiene que hacer es pasar a la
raíz el objeto View y así ir descendiendo a cada uno de sus nodos. El método
que se encarga de este proceso se llama Activity.setContentView ().
Para que Android sepa dibujar correctamente los objetos, se tienen que pasar
algunos datos, como son la altura y anchura, éstas puede ser en pixeles o en
porcentajes. Además Android cuenta con los siguientes tipos para poder
trabajar las dimensiones de los controles:
- Números.
- FILL_PARENT, permite al control tomar el ancho máximo o alto máximo del
contendor padre en el cual se encuentra.
- WRAP_CONTENT, igual que el anterior esta permite tomar el ancho máximo
permitido respeto al padre donde se encuentra.
- AT_MOST, el padre fija un tamaño de los controles hijos.
- EXACTLY, el padre impone un tamaño exacto al hijo.
- UNSPECIFIED, el padre fija el tamaño deseado del hijo.
Context.
Context es una interfaz mediante al cual se puede acceder a los recursos,
clases y otros elementos con los que cuenta el proyecto, además se podrán
manipular los intent y otras vistas.
OPERACIONES:
- Crear la primera aplicación Android y ejecutar la aplicación en el emulador.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i3 o superior.
- Sistema operativo Windows con Android Studio instalado.
1. Primero se tienen que crear todos los objetos que van a requerir los
controles de la aplicaciones, nos referimos a los String(los textos), los
style(los colores), las dimensiones (tamaños).
2. Luego, ingresar al XML del Activity_main y digitar:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Programando con Android"
android:id="@+id/textView"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ingrese Nombre:"
android:id="@+id/textView2"
android:layout_marginTop="30dp" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ingrese Edad:"
android:id="@+id/textView3" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Seleccione en caso de Masculino:"
android:id="@+id/textView4" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New CheckBox"
android:id="@+id/checkBox" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Grabar Datos"
android:id="@+id/button"
android:layout_marginTop="20dp" />
</LinearLayout>
</RelativeLayout>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtEdad=(EditText)findViewById(R.id.txtEdad);
txtNom=(EditText)findViewById(R.id.txtNombre);
chkSexo=(CheckBox)findViewById(R.id.chkSexo);
btnGrabar=(Button)findViewById(R.id.btnMostrar);
btnGrabar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sexo="";
if(chkSexo.isSelected())
sexo="Masculino";
else
sexo="Femenino";
Toast.makeText(getApplicationContext(),"Nombre:
"+txtNom.getText()+"\nEdad: "+txtEdad.getText()+"\nSexo:
"+sexo,Toast.LENGTH_LONG).show();
}
});
OPERACIONES:
- Organizar los elementos de una aplicación.
- Utilizar los diferentes tipos de control de una aplicación.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i3 o superior.
- Sistema operativo Windows con Android Studio instalado.
FrameLayout.
Un FrameLayout permite colocar a todos los controles que se
coloquen sobre la parte superior izquierda de la pantalla de tal
manera que todos los controles se pondrán uno sobre otro,
quedando ocultos cada vez que se coloque un nuevo control.
Ejemplo:
<FrameLayout
xmlns: android="http://schemas.android.com/apk/res/android"
Android: layout_width="match_parent"
Android: layout_height="match_parent">
<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text" />
</FrameLayout>
LinearLayout.
Este tipo de layout permite colocar los controles o
contenedores hijos uno después del otro ya sea de forma
horizontal (LinearLayout Horizontal) o vertical (LinearLayout
Vertical), para establecer el tipo de dirección se tiene que
establecer una propiedad la cual es Orientation la cual
permitirá saber si está como horizontal o vertical
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
TableLayout.
El TableLayout permite distribuir los controles o elementos que se coloquen
sobre él, en forma tabular definiendo filas y columnas, es decir que cada control
se colocaría sobre una celda ya que este control genera una tabla para colocar
todos sus elementos en celdas.
Para poder configurar la cantidad de filas que tendrá la tabla se utiliza una
propiedad llamada tableRow la cual permitirá aumentar o disminuir la cantidad
de las filas y dentro de cada fila se colocarán las columnas necesarias.
GridLayout.
Este tipo de layout fue includo a partir de la API 14 y su forma de trabajar es
bastante parecida a la de un TableLayout, ya que en este tipo de layout los
elementos que se coloquen dentro de él también serán distribuidos en forma de
tabla; es decir, se colocarán en una especie de celda ya que se distribuirán por
filas y columas.
La gran diferencia que existe de este control con el tableLayout es que en éste
se puede colocar la cantidad de filas y de columnas con las que contará la tabla
gracias a sus propiedades rowCount y columnCount, Con estas propiedades
ya no es necesario ningún tipo de elemento adicional como lo hacía el Table
Layout para agregar filas a la tabla.
RelativeLayout.
Este tipo de layout permite colocar los controles u objetos que van dentro de
este layout de forma aleatoria; es decir, para colocar estos elementos sólo se
tendrá que arrastrar el control sobre la pantalla y escoger la posición adecuada.
Cuando se encuentre la posición adecuada simplemente se soltará el mouse y
el control quedará en esa posición. Cuando se quiera insertar más controles se
mostrarán unas líneas guías para que se pueda alinear y ordenar los controles
con respecto al padre.
CONTROLES BÁSICOS.
Control Button.
Este control es uno de los más básicos y más
usados en una aplicación ya que este botón
permitirá lanzar o realizar cierta acción cuando
se haga un Touch sobre este control.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calcular Venta"
android:id="@+id/BtnCalcular"/>
Control ToggleButton.
Este tipo control también permite lanzar ciertas acciones, pero este botón tiene
la particularidad de trabajar con 2 estados los cuales son pulsados y no
pulsado. Por lo tanto, para este control en vez de definir un solo texto se
definen dos, una cuando esté activo y otro cuando se desactive. La declaración
de este control mediante XML es la siguiente:
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activar"
android:id="@+id/toggleButton"
android:checked="false" />
Control ImageButton.
Este tipo de control es igual al control de tipo Button, con la única diferencia
que en este control se podrá definir un ícono para el botón en vez de texto.
Para asignar un ícono en vez de texto se tiene que hacer uso de la propiedad
src la cual permitirá asignar un ícono el cual ha debido ser previamente
cargado en las imágenes del proyecto. Su código XML es el siguiente:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:layout_marginTop="104dp" />
Eventos de un botón.
Como en todo lenguaje de programación, se puede decir que el evento más
común es el evento click. Este evento permite lanzar una acción cuando se
toca el botón. Este evento trabaja con objetoView.OnClickListener () y
asociándolo al botón mediante el métodosetOnClickListener (). La forma de
declaración de ese evento en una clase sería la siguiente:
btn1=(Button)findViewById(R.id.button);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Control ImageView.
El control ImageView permite colocar imágenes dentro de la aplicación. Para
poder insertar una imagen dentro del control se tiene que utilizar la propiedad
src la cual permite cargar una imagen que previamente ha sido colocada dentro
del proyecto. En la carpeta Drawable, por ejemplo android:
src=”@drawable/unaimagen”.
img1=(ImageView)findViewById(R.id.imageView);
Control TextView.
Este tipo de control al igual que el control Button son los más utilizados, este
control permite colocar cualquier tipo de texto dentro de la aplicación en la
ubicación que se desee. Al igual que muchos de los controles el texto se
establece por medio de la propiedad text.
<TextView
android: layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Texto Ejemplo"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="87dp" />
Control EditText.
Este control es un control que permite ingresar valores de tipo cadena o
numérico cuando la aplicación está ejecutándose, igual que los otros controles
se podrá ingresar un texto mediante la propiedad text o cambiarle el alto o
ancho mediante la propiedad width o heigth.
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="108dp" />
Control CheckBox.
Este tipo de control permite escoger una o varias opciones de un grupo, este
control permite marcar o desmarcar las posibles opciones y en Android está
representado por una clase del mismo nombre CheckBox.
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New CheckBox"
android:id="@+id/checkBox"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="108dp" />
Control RadioButton.
A diferencia del control anterior, este control permite escoger sólo un elemento
de un grupo de opciones, ya que este control impide la selección de más de
uno por grupo. Este control tiene que trabajar obligatoriamente con un control
llamado RadioGroup, el cual es un control no visible que lo que hace es
agrupar las opciones para que estas no se puedan seleccionar varias a la vez;
de lo contrario, se estaría hablando un control de tipo checkBox. Su declaración
mediante XML seria de la siguiente manera:
<RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New RadioButton"
android:id="@+id/radioButton" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New RadioButton"
android:id="@+id/radioButton2" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New RadioButton"
android:id="@+id/radioButton3" />
</RadioGroup>
Gridview.
Este tipo de control permitirá colocar una serie de elementos de forma
cuadricular. Cuando se trabaja con este tipo de elementos uno puede elegir el
tamaño y la cantidad de columnas que va a tener dicho elemento, en cambio el
número de filas se coloca de una manera dinámica que se coloca en función al
número de ítems.
Al trabajar con este control tenemos propiedades que nos ayudaran a trabajar
con las columnas respectivas. Tal es el caso de:
Context Menu
Los menús contextuales son parecidos a los menús mostrados al hacer clic con
el botón derecho de un ratón en un PC, para crearlos, debemos sobreescribir el
método onCreateContextMenu(), donde se inflará el archivo xml.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo
menuInfo) {
super.onCreateContextMenu(menu, v, menu2);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu2, menu);
}
Igual que el menú anterior a este tipo de menú también se le puede dar
acciones. A continuacion se muestra el bloque de código para programar el
contextMenu:
@Override
public boolean onContextItemSelected(MenuItem i) {
switch (i.getItemId()) {
case R.id.about:
Toast.makeText(MenusActivity.this,"menus",Toast. LENGTH_LONG). show();
return true;
case R.id.pantalla2:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Por sus características, este tipo de mensajes son ideales para mostrar
mensajes rápidos y sencillos ya que no requieren ningún tipo de información
adicional.
Menus y Tabs
Los menus son uno de los elementos también muy importantes dentro de los
móviles ya que los menus siempre están presentes en las aplicaciones;
generalmente, se activan con los botones que se encuentran en la parte inferior
del móvil y este abre opciones de ayuda o configuración pero en realidad debe
hacer cualquier tipo de acción.
Options Menu.
Los OptionMenu vienen a ser los ítems o las opciones de cada uno de los
menus, estos viene a ser los más fáciles de definir. A continuación mostramos
un ejemplo de cómo se declara un menú dentro de un XML:
android:icon="@drawable/configuration"/>
</menu>
Cada vez que se requiera llamar a un menu se tiene que hacer uso del
comando MenuInflater.inflate(), el cual permitirá inflar el menu en cada una de
las pantallas en que se llame. A continuación se muestra el código que
permitirá inflar las opciones.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.ejemplo_menu, menu);
return true;
}
Ahora si es que el usuario le desea colocar las acciones a cada una de las
opciones se utilizará el comando onOptionsItemSelected() el cual permitirá
programar cada uno de los itmes que contiene el menu.
EditText txtNom;
Button btnBienvenida;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtNom=(EditText)findViewById(R.id.btnBienvenida);
btnBienvenida=(Button)findViewById(R.id.btnBienvenida);
btnBienvenida.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String texto=txtNom.getText().toString();
Toast.makeText(getApplicationContext(),"Bienvenido a Android
"+texto,Toast.LENGTH_LONG).show();
}
});
} }
btn1=(Button) findViewById(R.id.btnCalcular);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v == btn1) {
RadioGroup rg;
rg = (RadioGroup) findViewById(R.id.rgOpciones);
int precio = 0;
String curso = "";
if (rg.getCheckedRadioButtonId() == R.id.rb1) {
precio = 200;
curso = "Net";
} else if (rg.getCheckedRadioButtonId() == R.id.rb2) {
precio = 300;
curso = "Mysql";
} else {
precio = 350;
curso = "Jsp";
}
double dscto = 0, dsctobeca = 0;
CheckBox chk1;
CheckBox chk2;
chk2 = (CheckBox) findViewById(R.id.chkDscto2);
if (chk2.isChecked()) dsctobeca = precio * 0.10;
EditText nom;
nom = (EditText) findViewById(R.id.txtNom);
String texto1 = nom.getText().toString();
String msg = "El Alumno(a): " + texto1 + "\n Precio: " + precio +
"\n Dscto: " + dscto + "\n Dscto x beca: " + dsctobeca;
i.putExtra("dato1", texto1);
i.putExtra("dato2", texto2);
i.putExtra("dato3", texto3);
i.putExtra("dato4", texto4);
i.putExtra("dato5", texto5);
//mostramos el segundo layout
startActivity(i);
}
}
});
String nom="",precio="",dscto1="",dscto2="",curso="";
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
Bundle recupera=getIntent().getExtras();
if(recupera!=null){
nom=recupera.getString("dato1");
precio=recupera.getString("dato2");
dscto1=recupera.getString("dato3");
dscto2=recupera.getString("dato4");
curso=recupera.getString("dato5");
}
TextView mensaje1=(TextView) findViewById(R.id.txtNom2);
TextView mensaje2=(TextView) findViewById(R.id.txtPre2);
TextView mensaje3=(TextView) findViewById(R.id.txtDstco2);
TextView mensaje4=(TextView) findViewById(R.id.txtDscto22);
TextView mensaje5=(TextView) findViewById(R.id.txtcurso2);
mensaje1.setText("Nombre: "+nom);
mensaje2.setText("Precio: "+precio);
mensaje3.setText("Dscto1: "+dscto1);
mensaje4.setText("Dscto2: "+dscto2);
mensaje5.setText("Curso: "+curso);
Button btn2=(Button) findViewById(R.id.btnVolver);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
LOS LISTVIEW.
Cuando se crea un ListView se tiene que tener en cuenta que todo listView
necesita de un contendor el cual por lo general es Layout.
Se tiene que crear una clase y enlazarla con este ListView para que se pueda
visualizar de lo contrario no se podrá visualizar.
<FrameLayout>
<ListView
android:id="@android:id/list"
... />
<TextView
android:id="@android:id/empty"
... />
</FrameLayout>
@+id/nombre_identificador
1. Primero se tiene que declarar una lista por medio del xml ya que las lista es
una clase que androide la tiene en sus librerías.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lista1.setAdapter(adap);
lista1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int
position,long id) {
Toast.makeText(getApplicationContext(),
(String)lista1.getItemAtPosition(position),Toast.LENGTH_LONG).show();
}
});
} }
Control Spinner.
En android los combobox llevan el nombre de Spinner. Los Spinner funcionan
como cualquier combo de algún lenguaje de programación, es decir cuentan
con un índice, y sus elementos, la diferencia es que algunos de acuerdo al tipo
de versión de Android tiene diferente forma de presentación. Los comandos
para añadir una lista mediante códigos XML son las siguientes:
<Spinner android:id="@+id/Sp1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
//...
cmbOpciones = (Spinner)findViewById(R.id.CmbOpciones);
adaptador.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
cmbOpciones.setAdapter(adaptador);
Puede se puede apreciar en las imágenes, todos los spinner muestran todas
sus opciones y además muestran la opción seleccionada.
Al igual que las listas o ListView los Spinner también cuentan con eventos los
cuales podrán se invocados desde la clase principal. Uno de los eventos más
importantes es el evento onItemSelected, el cual podrá mostrar una acción
cada vez que se seleccione un elemento de la lista, para poder hacer uso del
evento se hará de la misma manera que las lista.
Spinner1.setOnItemSelectedListener (
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position, long id) {
lbltexto.setText("Seleccionado: " + datos[position]);
}
1. ¿Con cuántos tipos de layout cuenta Android Studio? Dar una breve
descripcion de cada uno de ellos.
2. ¿Para qué sirve el control ToggleButton?
3. ¿Para qué sirve el control ImageButton?
4. ¿Cuántos eventos acepta un Boton? Mencionar como mínimo 5 de ellos.
5. Mencionar 3 propiedades y dos eventos del control radioButton.
6. Mencionar 3 propiedades y dos eventos del control gridView.
7. Mencionar 5 propiedades y 2 eventos de un ListView.
8. El listView y el Spinner ¿Comparten las mismas propiedades o son
direfentes?
OPERACIONES:
- Conocer y utilizar los tipos de eventosde Android.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
ESCUCHADOR DE EVENTOS.
Un listener de un evento es una interfaz de la clase View que contiene un sólo
método callback. A continuación se mostrarán los eventos más comunes que
se utiliza en Android:
onClick()
Este evento es activado cuando el usuario a pulsado el control, cuando esto
sucede se llama a View.OnClickListener. También se puede decir que este
evento se activa cuando se cambia el foco de control y se presiona enter.
onLongClick()
Este evento se activa cuando el usuario pulsa el item con las teclas de
navegación o con el trackball y pulsa la tecla "enter", este evento se llama
desde el View.OnLongClickListener.
onFocusChange()
Este evento se activa cuando el usuario está por encima del ítem, o cuando se
aleja. Este evento cuando es activado se llama desde
View.OnFocusChangeListener.
onKey()
Este evento se activa cuando el usuario esta con el foco sobre el control
deseado, este evento se llama desde View.OnKeyListener.
onTouch()
Este evento se activa cuando el usuario pulsa un control. A comparación de los
otros eventos este evento tiene múltiples estados ya que cuando uno pulsa un
control este evento detecta cuando uno ha pulsado el control, luego si se
mantiene pulsado o se mueve el control, cuando se deja de pulsar el control,
etc. Cuando se activa este control se llama desde el View.OnTouchListener.
MANEJADOR DE EVENTOS.
ArrayAdapter<String> adap =
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, elementos);
ArrayAdapter<CharSequence> adap =
ArrayAdapter.createFromResource(this,
R.array.Elementos,
android.R.layout.simple_spinner_item);
Pantalla táctil.
Todos los móviles (celulares y tablets) tienen una pantalla táctil que funciona
como dispositivos de entrada para las acciones que realizara el usuario del
móvil. El trabajar con la pantalla táctil hace que el uso del mouse sea sustituido
eliminados así el evento Click. Utilizando el touch de la pantalla táctil se puede
seleccionar, arrastrar y soltar cualquier elemento de la pantalla de forma
sencilla. Uno de los usos más importantes de la pantalla táctil es el de los
juegos ya que los juegos utilizan la pantalla táctil como fuente de ingreso de
acciones para los mismos; ya sean movimientos, disparos, saltos, etc. También
se utiliza la pantalla táctil para trabajar con los famosos Gestures, un muy buen
ejemplo del uso de estos gestures es el uso del patrón de ingreso en las
pantallas de inicio de los móviles.
1. Crear la vista del activity con un textview que diga evento touch.
2. Crear el programa en el src
@Override
public boolean onTouch(View v, MotionEvent m) {
switch(m.getAction()){
case MotionEvent.ACTION_DOWN:
txta.setText("Has Activado el Evento Touch 1");
break;
case MotionEvent.ACTION_MOVE:
txta.setText("Has realizado un movimiento con el dedo 1");
break;
case MotionEvent.ACTION_UP:
txta.setText("Has retirado el dedo de la pantalla 1");
break;
}
return true;
}
}
String text=builder.toString();
textview1.setText(text);
return true;
}
});
}
}
Pulsaciones.
Cuando el usuario pulsa con varios dedos la pantalla al mismo tiempo se
generan las siguientes acciones:
if (event.getPointerCount ()> 1) {
Log.d (DEBUG_TAG, "El MultiTouch esta activado");
xPos = (int) MotionEventCompat.getX (evento, i);
yPos = (int) MotionEventCompat.getY (evento, i);
} Else {
Log.d (DEBUG_TAG, "evento touch simple");
xPos = (int) MotionEventCompat.getX (evento, el i);
yPos = (int) MotionEventCompat.getY (evento, el i);
}
actionToString static String público (int acción) {
switch (acción) {
caso MotionEvent.ACTION_DOWN: return "Down";
caso MotionEvent.ACTION_MOVE: return "Move";
caso MotionEvent.ACTION_POINTER_DOWN: return "Pointer Down";
caso MotionEvent.ACTION_UP: return "Up";
caso MotionEvent.ACTION_POINTER_UP: return "Pointer Up";
caso MotionEvent.ACTION_OUTSIDE: return "Outside";
caso MotionEvent.ACTION_CANCEL: return "Cancelar";
}
return "";
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/TextViewEntrada"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_margin="2dp"
android:layout_weight="1"
android:background="@color/color5"
android:text="@string/titulo1"
android:textSize="10sp" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1" >
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/TextViewSalida"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="2dp"
android:text="@string/titulo2" />
</LinearLayout>
</ScrollView>
</LinearLayout>
OPERACIONES:
- Crear aplicaciones con más de unapantalla.
- Trabajar con parámetros de envío entre pantallas.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
Los intents nos permiten llamar a otras pantallas que se encuentren dentro de
nuestra aplicación o incluso que estén fuera de nuestra aplicación, asi como
también nos permitirán enviar algún tipo de evento o algún tipo de dato a otra
aplicación
Filtros en Intents.
Crear una aplicación que permita crear una lista de opciones. Cada una de las
opciones abrirá un nuevo intent y este a su vez tendrá un botón para retornar a
la lista principal.
3. Incluir todos los intent en el android manifest para que puedan ser
reconocidos por el proyecto.
5. Declarar una lista por medio del xml ya que las lista es una clase que
android la tiene en sus librerías.
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout2);
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
});
}
1. ¿Que es un Intent?
2. ¿Donde se declaran los intents al momento de ser creados?
3. Crear una aplicacion la cual cuente con dos pantalla, en la primera pantalla
que reciba tus datos de registro de usuarios y en la segunda pantalla que
muestre los datos ingresados
OPERACIONES:
- Conocer los diferentes tipos de menú que se pueden aplicar en una
aplicación Android
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
Para definir un menú XML se tiene que crear un archivo XML dentro de la
carpeta menú que se encuentra en RES y debe comenzar por las etiquetas
<menú></menú> y dentro de dichas etiquetas se encontraran las etiquetas
<item></item> las cuales serán puestas para cada una de las opciones con las
que contara el menú.
</item>
</menu>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lblMensaje=(TextView) findViewById(R.id.lblMensaje);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_principal, menu);
return true;
}
OPERACIONES:
- Reconocer los diferentes tipos de sensores con los que cuenta el móvil.
- Utilizar la móvil como herramienta de ubicación mediante el GoogleMap.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
LOCATIONMANAGER Y LOCATIONPROVIDER.
SENSORES DE POSICIÓN Y LOCALIZACIÓN.
Mecanismos de localización.
Entre los principales mecanismos de localización tenemos los ya mencionados
GPS y Wi-fi pero existen otros mecanismos de localización como es el caso de
los métodos getAllProvaiders que pertenece a la clase LocationManager la cual
nos basaremos a la hora de utilizar la API de localización de android.
GEO CODIFICACIÓN.
MapView y MapController.
El control MapView permite manipular el mapa desde nuestra aplicación
instalada en el móvil. Este tipo de control es muy potente ya que nos permite
un control en vista satélite, marca las zonas disponibles, Mostrar información
sobre el trafico utilizando StreetView ,entre otros.
El MapController nos permite manipular el Zoom del mapa asi como otras
acciones del mapa mostrado por el control MapView
OPERACIONES:
- Crear una base de datos en SQLite.
- Crear un mantenimiento en Android Que permita interactuar con una BD en
SQLite.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
En Android vienen incluidas las librerías necesarias para poder trabajar con
base de datos SQLite esto hace que el uso de esta BD sea bastante ligera ya
que se crea a través de una clase Java.
SQLITEOPENHELPER.
Para crear y trabajar con bases de datos en Android, es necesario hacer uso
de la clase SQLiteOpenHelper. En esta clase es necesario sobrescribir los
métodos onCreate() para crear la base de datos, y onUpgrade() para actualizar
la base de datos en caso de que existan cambios en el esquema de la misma.
Ambos métodos reciben como parámetro un objeto SQLiteDatabase.
SQLDATABASE Y CURSOR.
Cuando se utiliza la clase SQLiteDatabase esta provee los métodos insert(),
update() y delete() y execSQL() la cual permite ejecutar las sentencias SQL de
una manera más sencilla y de una forma más directa, y si se habla de esos
métodos que facilitan el uso del comando entonces también se habla de los
objetos ContentValues los cuales permiten definir claves y valores en las
sentencias Insert y Update. La clave (key) corresponde a la columna y el valor
es el valor para la columna.
Las consultas se pueden crear a través del método rawQuery() que acepta
como parámetro una sentencia en SQL o el método query() que proporciona
una interfaz para especificar los datos dinámicos o un objeto de
tipo SQLiteQueryBuilder. SQLiteBuilder es similar a la interfaz de un proveedor
de contenidos por lo que suele utilizarse con Content Providers. Hay que saber
también que toda consulta que se realice retornará un objeto de tipoCursor.
/data/data/paquetejava/shared_prefs/nombre_coleccion.xml
/data/data/shared_prefs/pref1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SeekBar
android:id="@+id/barra"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/etiqueta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Ingreso" />
<EditText
android:id="@+id/caja"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<Button
android:id="@+id/boton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Boton" />
</LinearLayout>
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Toast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boton=(Button) findViewById(R.id.boton);
caja=(EditText) findViewById(R.id.caja);
barra=(SeekBar) findViewById(R.id.barra);
boton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
npref=getSharedPreferences(nompref, MODE_PRIVATE);
SharedPreferences.Editor editor=npref.edit();
editor.putFloat(TAM_FUENTE,caja.getTextSize());
editor.putString(VALOR_TEXTO,caja.getText().toString());
editor.commit();
Toast.makeText(getBaseContext(),"preferencias
almacenadas",Toast.LENGTH_SHORT).show();
}
});
npref=getSharedPreferences(nompref, MODE_PRIVATE);
float tamletra=npref.getFloat(TAM_FUENTE,12);
barra.setProgress((int)tamletra);
caja.setText(npref.getString(VALOR_TEXTO, ""));
caja.setTextSize(barra.getProgress());
barra.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
caja.setTextSize(progress);
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
CONTENT PROVIDERS.
El uso de lso content provaiders son una excelente opción ya que solo basta un
buen uso de los URIS y de sus libriras de código.
this.getWritableDatabase().delete("contactos",_ID+"="+cod , null);
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Contactos"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtcod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nombre:" />
<EditText
android:id="@+id/txtnom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtnom2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Direccion: " />
<EditText
android:id="@+id/txtdir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtdireccion2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Correo: " />
<EditText
android:id="@+id/txtcorreo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtcorreo2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Telefono: " />
<EditText
android:id="@+id/txttel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="phone" />
</TableRow>
</TableLayout>
<Button
android:id="@+id/btngrabar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Grabar Contacto" />
<TableRow
android:id="@+id/tableRow5"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnmostrar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mostrar Contactos" />
</TableRow>
<TableRow
android:id="@+id/tableRow6"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btneliminar"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:text="Eliminar" />
<Button
android:id="@+id/btneditar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Editar" />
</TableRow>
</LinearLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Listado de Contactos"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtcontacto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android: layout_width="match_parent"
android: layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android: layout_width="match_parent"
android: layout_height="wrap_content"
android: orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android: id="@+id/textView1"
android: layout_width="80dp"
android: layout_height="wrap_content"
android: text="Codigo:" />
<TextView
android:id="@+id/txtcod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="38dp"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Nombre:" />
<TextView
android:id="@+id/txtnom2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView3"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Direccion: " />
<TextView
android:id="@+id/txtdireccion2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView4"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Correo:" />
<TextView
android:id="@+id/txtcorreo2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView5"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Telefono" />
<TextView
android:id="@+id/txttelefono2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/botoneliminar2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Eliminar Registro" />
</LinearLayout>
android:layout_height="wrap_content"
android:text="Codigo" />
<EditText
android:id="@+id/txtcod3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" >
<requestFocus />
</EditText>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView3"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="Nombre" />
<EditText
android:id="@+id/txtnom3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView4"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="Direccion" />
<EditText
android:id="@+id/txtdir3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView5"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="Correo" />
<EditText
android:id="@+id/txtcor3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView6"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="Telefono" />
<EditText
android:id="@+id/txttel3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btneditar2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Editar Datos" />
</LinearLayout>
5. Ahora que ya se han definido los recursos, layouts y las clases que
ayudarán a manipular la parte de SQLite en Android. Estamos listos para
crear las actividades que nos ayudarán a juntar cada una de estas piezas.
1. Dentro del directorio principal de src del proyecto vamos a crear las
siguientes actividades:
Mainactivity.java
import com.senati.bd_contactos.database.Handler_Sqlite;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//BOTON MOSTRAR
Button btnmostrar=(Button) findViewById(R.id.btnmostrar);
btnmostrar.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent (getApplicationContext(),
MainActivity_listado.class);
//estas sentencia indica que la actividad principal espera un resultado
startActivity(i);
}
});
//BOTON ELIMINAR
Button btneliminar=(Button) findViewById(R.id.btneliminar);
btneliminar.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent (getApplicationContext(), MainActivity_Eliminar.class);
//estas sentencia indica que la actividad principal espera un resultado
startActivity(i);
});
//BOTON EDITAR
Button btneditar=(Button) findViewById(R.id.btneditar);
btneditar.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent (getApplicationContext(),
MainActivity_listado.class); //estas sentencia indica que la actividad principal
espera un resultado
startActivity(i);
}
});
}
}
Mainactivity_listado.java
package com.senati.bd_contactos;
import com.senati.bd_contactos.database.Handler_Sqlite;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.SyncStateContract.Helpers;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,long
arg3){
//recuperamos el item que esta en tal posicion
Cursor xcursor=(Cursor) lv.getItemAtPosition(position);
//este metodo hace que recupere este valor o devuelve una
excepcion
String cod=xcursor.getString(xcursor.getColumnIndexOrThrow("_id"));
//Toast.makeText(getApplicationContext(),cod,Toast.LENGTH_LONG).show();
//Ahora enviamos el valor capturado a mainactivity_editar
Intent i = new Intent (getApplicationContext(), MainActivity_Editar.class);
i.putExtra("clave", cod);
//estas sentencia indica que la actividad principal espera un resultado
startActivity(i);
}
});
}
private void cargarContactos(){
//helper.abrir();
try{
Cursor cursor=helper.listaContactos();
//colocamos el nombre de las columnas que va a air al listview
//el nombre de las columnas estan en countriesdbadapter
String[]
columnas={Handler_Sqlite._ID,Handler_Sqlite.NOMBRE,Handler_Sqlite.DIRECCION,
Handler_Sqlite.CORREO,Handler_Sqlite.TELEFONO};
//colocamos los valores de cada columna donde se van a pintar
int[]
donde={R.id.txtcod,R.id.txtnom2,R.id.txtdireccion2,R.id.txtcorreo2,R.id.txttelefono2};
//ahora seleccionamos el adaptador que vamos a utilizar para mostrar los
valores
dataAdapter=new SimpleCursorAdapter(this,R.layout.listado, cursor, columnas,
donde);
lv=(ListView) findViewById(R.id.listView1);
lv.setAdapter(dataAdapter);
}catch(Exception e){System.out.println(e);}
}
}
Mainactivity_eliminar.java
import com.senati.bd_contactos.database.Handler_Sqlite;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
Mainactivity_editar.java
import com.senati.bd_contactos.database.Handler_Sqlite;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class MainActivity_Editar extends Activity {
//declaramos la variable que almacenara el codigo enviado
String codrecuperado="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editar);
//instanciamos la base de datos
final Handler_Sqlite helper=new Handler_Sqlite(this, "Bd1", null, 1);
nom3.setText(cursor.getString(cursor.getColumnIndex(helper.NOMBRE)));
dir3.setText(cursor.getString(cursor.getColumnIndex(helper.DIRECCION)));
cor3.setText(cursor.getString(cursor.getColumnIndex(helper.CORREO)));
tel3.setText(cursor.getString(cursor.getColumnIndex(helper.TELEFONO)));
}
}
ARCHIVOS LOCALES.
/data/data/nombre_paquete/files/nombre_fichero
Modos de acceso:
Si estamos hablando de archivos planos o archivos de tipo txt tenemos que
hablar de los diferentes tipos de acceso. A continuación mostramos los
diferentes tipos de acceso:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
@Override
public void onClick(View v) {
String str=caja.getText().toString();
try{
fout=openFileOutput("archivotexto.txt",MODE_WORLD_READABLE);
OutputStreamWriter osw=new OutputStreamWriter(fout);
osw.write(str);
osw.flush();
osw.close();
Toast.makeText(getBaseContext(),"Datos Guardados con exito",
Toast.LENGTH_SHORT). show();
caja.setText("");
}catch(Exception e){
e.printStackTrace();
}
}
});
bload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try{
fIn=openFileInput("archivotexto.txt");
InputStreamReader isr=new InputStreamReader(fIn);
package com.idat.almacenamiento_externo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.view.Menu;
import android.widget.TextView;
String text=cargararchivotexto(inputStream);
texto.setText(text);
}catch(IOException e){
texto.setText("No se úede cargar el archivo");
}finally{
if(inputStream!=null)
try{
inputStream.close();
}catch (Exception e2) {
texto.setText("No se puede cerra el archivo");
} }
}
1. ¿Qué es SQLite?
2. ¿Cuáles son las ventajas de utilizar SQLite?
3. ¿Para qué sirve el SQLITEOPENHELPER?
4. ¿Para qué sirve un cursor?
5. ¿Qué es un Content provider?
6. ¿En qué se diferencia Mode_World_Mode_World_ y Mode_World_writiable?
7. ¿Dónde se almacenan las preferencias compartidas?
8. ¿Dónde se almacena un archivo local?
9. ¿Cuáles son los modos de acceso de un archivo local, de una breve
descripcion de cada uno de ellos?
OPERACIONES:
- Conocer y aplicar los diferentes tipos de Web Service que existen en un
proyecto Android.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
WEB SERVICE
Crear una aplicación la cual permite conectarse a una página web para que
pueda realizar el cambio de grados Fahrenheit a Celsius, devolviendo le valor
de respuesta.
android:layout_width="wrap_content"
android:text="Convert"
android:layout_height="wrap_content"
android:id="@+id/convert"
android:onClick="convertFahrenheitToCelsius"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/response"
android:gravity="center_horizontal"
/>
</LinearLayout>
3. Codificar la actividad:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import com.webservice.test.R.id;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void convertFahrenheitToCelsius(View v)
{
TextView response_tv = (TextView)findViewById(id.response);
final TextView input_tv = (TextView)findViewById(id.inputTemp);
String fahrenheit_value = input_tv.getText().toString();
if(fahrenheit_value == null || fahrenheit_value.length() == 0)
{
response_tv.setText("Error!");
return;
}
SoapObject request = new SoapObject(NAMESPACE, METHOD);
PropertyInfo FahrenheitProp = new PropertyInfo();
FahrenheitProp.setName("Fahrenheit");
FahrenheitProp.setValue(fahrenheit_value);
FahrenheitProp.setType(String.class);
request.addProperty(FahrenheitProp);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope
(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try
{
androidHttpTransport.call(SOAPACTION, envelope);
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
response_tv.setText(fahrenheit_value + " F = " + response.toString() + " C");
}catch(Exception e)
{
e.printStackTrace();
}
}
}
Conexión HTTP.
Todas las conexiones realizadas desde un móvil hacia un servidor web tienen
un estándar a nivel mundial el cual lleva el nombre de Hipertext Transfer
Protocol HTTP. Este protoclo nos permite la comunicación y transferencia de
datos de una manera rápida y sencilla entre equipos que pertenecen a una
determinada red.
Al móvil el cual realiza alguna petición de algún tipo de dato se le llama cliente
y a aquel que contiene la data o el sitio de almacenamiento se le denomina
servidor.
Para realizar una petición hacia el servidor esta usa dos de los métodos mas
conocidos para el envio de datos, estos métodos son los métodos GET y SET,
se podrá usar cualquiera de estos desde el móvil, eso se hace al momento de
realizar la codificación.
OPERACIONES:
- Crear un servicio mediante PHP que permita la conexión de Android con
MySQL.
- Realizar un mantenimiento de datos desde Android a una Bd en MySQL.
EQUIPOS Y MATERIALES:
- Computadora con microprocesador i5 o superior.
- Sistema operativo Windows con Android Studio instalado.
- Wamp Server instalado.
- Mysql-Front instalado.
- NetBeans Instalado.
Se creará un web service echo en php el cual permita almacenar datos desde
un dispositivo con Android hacia una base de datos MySql, a su vez permite
leer, insertar, eliminar y editar datos desde el móvil hacia la base de datos
MySql, haciendo uso de PHP como intermediario.
IngresoData.php
<?php
$nom=$_REQUEST['nombre'];
$edad=$_REQUEST['edad'];
$sexo=$_REQUEST['sexo'];
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("insert into usuarios values(null,'$nom','$edad','$sexo')");
echo $nom."<br>".$edad."<br>".$sexo;
?>
GetData.php
<?php
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("select * from usuarios");
$datos=array();
foreach($res as $row){
$datos[]=$row;
}
echo json_encode($datos);
?>
eliminarData.php
<?php
$cod=$_REQUEST['cod'];
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("delete from usuarios where codUSU='$cod'");
?>
MAINACTIVITY.JAVA
public class MainActivity extends ActionBarActivity {
EditText txtNom,txtEdad,txtSexo;
Button btnInsertar,btnListar,btnEliminar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtNom=(EditText) findViewById(R.id.txtNom);
txtEdad=(EditText) findViewById(R.id.txtEdad);
txtSexo=(EditText) findViewById(R.id.txtSexo);
btnInsertar=(Button) findViewById(R.id.btnAgregar);
btnInsertar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread nt=new Thread(){
@Override
public void run() {
try{
final String res;
res=enviarGet(txtNom.getText().toString(),txtEdad.getText().toString(),txtSexo.g
etText().toString());
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, res,
Toast.LENGTH_LONG).show();
}
});
}catch(Exception e){}
}
};
nt.start();
}
});
btnEliminar=(Button) findViewById(R.id.btnEliminar);
btnEliminar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new
Intent(getApplicationContext(),eliminarCod.class);
startActivity(i);
}
});
btnListar=(Button) findViewById(R.id.btnListar);
btnListar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getApplicationContext(),Listado.class);
startActivity(i);
}
});
}
EditText txtCod;
Button btnEliminarCod;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eliminar);
txtCod=(EditText) findViewById(R.id.txtEliminarCod);
btnEliminarCod=(Button) findViewById(R.id.btnEliminarCod);
btnEliminarCod.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread nt=new Thread(){
@Override
public void run() {
try{
final String res;
res=enviarGet(txtCod.getText().toString());
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(eliminarCod.this, res,
Toast.LENGTH_LONG).show();
}
});
}catch(Exception e){}
}
};
nt.start();
}
});
}
public String enviarGet(String c){
HttpClient httpClient=new DefaultHttpClient();
HttpContext localContext=new BasicHttpContext();
HttpResponse response=null;
String parametros="?cod="+c;
HttpGet httpget = new
HttpGet("http://10.0.2.2:82/AndroidRemoto/EliminarData.php"+parametros);
//HttpGet httpget=new
HttpGet("http://127.0.0.1:82/AndroidRemoto/EliminarData.php"+parametros);
try{
response=httpClient.execute(httpget,localContext);
}catch(Exception ex){
Toast.makeText(getApplicationContext(), "error: "+ex,
Toast.LENGTH_LONG).show();
}
return response.toString();
}
}
LISTADO.JAVA
public class Listado extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listado);
runOnUiThread(new Runnable() {
@Override
public void run() {
cargaListado(obtDatosJSON(resultado));
}
}); } };
tr.start();
}
<?php
$nom=$_REQUEST['nom'];
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("select * from usuarios where nomUsu like '%$nom%'");
$datos=array();
foreach($res as $row){
$datos[]=$row;
}
echo json_encode($datos);
?>
Button btnConsultar;
EditText txtC;
String c="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_consultar);
txtC=(EditText) findViewById(R.id.txtCon);
btnConsultar=(Button) findViewById(R.id.btnConsultar);
btnConsultar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
c=txtC.getText().toString();
Thread tr=new Thread(){
@Override
public void run() {
final String resultado=leer(c);
runOnUiThread(new Runnable() {
@Override
public void run() {
cargaListado(obtDatosJSON(resultado));
}
});
}
};
tr.start();
}
});
String resultado=null;
try{
HttpResponse response=cliente.execute(httpget,contexto);
HttpEntity entity=response.getEntity();
resultado=EntityUtils.toString(entity,"UTF-8");
}catch(Exception e){}
return resultado;
}
public void cargaListado(ArrayList<String> datos){
ArrayAdapter<String> adaptador=new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datos);
ListView listado=(ListView) findViewById(R.id.lstConsulta);
listado.setAdapter(adaptador);
}
}
<?php
$cod=$_REQUEST['cod'];
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("select * from usuarios where codUsu like $cod");
$datos=array();
foreach($res as $row){
$datos[]=$row;
}
echo json_encode($datos);
?>
EDITARDATA.PHP
<?php
$cod=$_REQUEST['cod'];
$nom=$_REQUEST['nom'];
$edad=$_REQUEST['edad'];
$sexo=$_REQUEST['sexo'];
$cnx=new PDO("mysql:host=localhost;dbname=android2","root","");
$res=$cnx->query("update usuarios set nomUsu='$nom',edadUsu=$edad,sexo='$sexo'
where codUsu=$cod");
?>
EDITAR.JAVA
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editaruno);
txtCod=(EditText) findViewById(R.id.txtCodEditar1);
txtNom=(EditText) findViewById(R.id.txtNomEditar1);
txtEdad=(EditText) findViewById(R.id.txtEdadEditar1);
txtSexo=(EditText) findViewById(R.id.txtSexoEditar1);
btnBuscar=(Button) findViewById(R.id.btnConsultarEditar);
btnEditar=(Button) findViewById(R.id.btnEditarFinal1);
//BOTON BUSCAR
btnBuscar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
c=Integer.parseInt(txtCod.getText().toString());
Thread tr=new Thread(){
@Override
public void run() {
final String resultado=leer(c);
runOnUiThread(new Runnable() {
@Override
public void run() {
LlenarDatos(resultado);
}
});
}
};
tr.start();
}
});
//BOTON EDITAR
btnEditar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread nt=new Thread(){
@Override
public void run() {
try{
final String res;
res=enviarGet(txtCod.getText().toString(),txtNom.getText().toString(),txtEdad.ge
tText().toString(),txtSexo.getText().toString());
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(Editar.this, res,
Toast.LENGTH_LONG).show();
}
});
}catch(Exception e){}
}
};
nt.start();
}
});
}
//METODO PARA LLENAR LOS TEXTBOX
public void LlenarDatos(String response){
try{
JSONArray json=new JSONArray(response);
for(int i=0; i<json.length();i++){
txtNom.setText(json.getJSONObject(i).getString("nomUsu"));
txtEdad.setText(json.getJSONObject(i).getString("edadUsu"));
txtSexo.setText(json.getJSONObject(i).getString("sexo"));
}
}catch(Exception e){}
}
//METODO PARA LEER LOS DATOS
public String leer(int cod){
HttpClient cliente=new DefaultHttpClient();
HttpContext contexto=new BasicHttpContext();
HttpGet httpget=new
HttpGet("http://10.0.2.2:82/AndroidRemoto/ConsultaData2.php?&cod="+cod);
String resultado=null;
try{
HttpResponse response=cliente.execute(httpget,contexto);
HttpEntity entity=response.getEntity();
resultado=EntityUtils.toString(entity,"UTF-8");
}catch(Exception e){}
return resultado;
}
//METODO PARA EDITAR
public String enviarGet(String c, String n, String e, String s){
HttpClient httpClient=new DefaultHttpClient();
HttpContext localContext=new BasicHttpContext();
HttpResponse response=null;
String parametros="?&cod="+c+"&nom="+n+"&edad="+e+"&sexo="+s;
HttpGet httpget=new
HttpGet("http://10.0.2.2:82/AndroidRemoto/EditarData.php"+parametros);
try{
response=httpClient.execute(httpget,localContext);
}catch(Exception ex){
btnConsultarEditar=(Button) findViewById(R.id.btnConsultarEditar);
btnConsultarEditar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getApplicationContext(),Editar.class);
startActivity(i);
}
});
LOGUEO
ANDROID1.PHP
<?php
$usu=$_REQUEST['usu'];
$pas=$_REQUEST['pas'];
$cnx=new PDO("mysql:host=localhost;dbname=android","root","");
$res=$cnx->query("select * from usuarios where codUsu='$usu' and pasUsu='$pas'");
$datos=array();
foreach($res as $row){
$datos[]=$row;
}
echo json_encode($datos);
?>
MAINACTIVITY.PHP
public class MainActivity extends ActionBarActivity {
Button btnIngresar;
EditText txtUsu,txtPas;
String usu="",pas="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtUsu=(EditText) findViewById(R.id.txtUsu);
txtPas=(EditText) findViewById(R.id.txtPas);
btnIngresar=(Button) findViewById(R.id.btnIngresar);
btnIngresar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
usu=txtUsu.getText().toString();
pas=txtPas.getText().toString();
Thread tr=new Thread(){
@Override
public void run() {
final String resultado=leer(usu,pas);
runOnUiThread(new Runnable() {
@Override
public void run() {
int r=obtDatosJSON(resultado);
if(r>0){
Intent i=new Intent(getApplicationContext(),MainPrincipal.class);
startActivity(i);
}else{
Toast.makeText(getApplicationContext(), "Incorrecto",
Toast.LENGTH_LONG).show();
}
}
});
}
};
tr.start();
}
});