Hoy veremos un tutorial de volley listar usuario, este tutorial constara de tres partes en la primera parte veremos la base de datos la web services y un ejercicio en android de como listar un usuarios con todos sus datos, veremos algunos conceptos básicos y la implementacion de dicho ejercicio.
Contenidos
Como listar usuario con la libreria volley
Cosas que debemos saber sobre VOLLEY
Ques es Volley?
Es una librería desarrollada por Google para optimizar el envío de peticiones Http desde las aplicaciones Android hacia servidores externos, la cual reemplaza a la vieja librería de APACHE que solíamos utilizar.Que ventajas tiene esta Librería?
-Procesamiento concurrente de peticiones.
-Priorización de las peticiones, lo que permite definir la preponderancia de cada petición.
-Cancelación de peticiones, evitando la presentación de resultados no deseados en el hilo principal.
-Gestión automática de trabajos en segundo plano, dejando de lado la implementación manual de un framework de hilos.
-Implementación de caché en disco y memoria.
-Capacidad de personalización de las peticiones.
-Provee información detallada del estado y flujo de trabajo de las peticiones en la consola de depuración.
Sin mas empezamos con el ejercicio practico para eso necesitamos armar nuestra base de datos:
BASE DE DATOS
Base de datos-Clic para expanderCREATE TABLE `usuario` ( `codigo` int(11) NOT NULL, `nombre` varchar(100) NOT NULL, `movil` varchar(10) NOT NULL, `email` varchar(100) NOT NULL, `clave` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `usuario` (`codigo`, `nombre`, `movil`, `email`, `clave`) VALUES (1, 'ANDROFAST', '9996701254', '[email protected]', '827ccb0eea8a706c4c34a16891f84e7b'); ALTER TABLE `usuario` ADD PRIMARY KEY (`codigo`); ALTER TABLE `usuario` MODIFY `codigo` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; COMMIT;
WebServices
Para este tutorial usaremos el método de N capas que constara de 3 niveles datos – negocio – web-services si desconoces este modelo te sugiero que revises el siguiente link: Programación N capas todo estará guardado dentro de nuestro xampp en una carpeta llamada volley la estructura debe quedar como la siguiente imagen:
Algunos archivos de tipo clase serán guardados con la extensión de clase.php
Dentro de la carpeta datos ira un archivo:
Conexion.clase.php
Conexion.clase.php - Clic para expander
<?php class Conexion { protected $dblink; function __construct() { $servidor = "mysql:host=localhost;dbname=volley"; $usuario = "root"; $clave = "12345"; $this->dblink = new PDO($servidor, $usuario, $clave); $this->dblink->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->dblink->exec("SET NAMES utf8"); } } ?>
Dentro de la carpeta negocio irán dos archivos y serán los siguientes:
Sesion.clase.php
Sesion.clase.php - Clic para expander<?php require_once '../datos/Conexion.clase.php'; class Sesion extends Conexion { public function iniciarSesion($email, $clave) { $sql = "select codigo, nombre, movil, clave from usuario where email = :em"; $sentencia = $this->dblink->prepare($sql); $sentencia->bindParam(":em", $email); $sentencia->execute(); if ($sentencia->rowCount()<=0){ return FALSE; } $resultado = $sentencia->fetchObject(); if ($resultado->clave == md5($clave)){ return TRUE; } return FALSE; } public function obtenerNombreUsuario($email){ $sql = "select nombre from usuario where email = :em"; $sentencia = $this->dblink->prepare($sql); $sentencia->bindParam(":em", $email); $sentencia->execute(); $resultado = $sentencia->fetchObject(); return $resultado->nombre; } public function obtenerCodigoUsuario($email){ $sql = "select codigo from usuario where email = :em"; $sentencia = $this->dblink->prepare($sql); $sentencia->bindParam(":em", $email); $sentencia->execute(); $resultado = $sentencia->fetchObject(); return $resultado->codigo; } } ?>
[/expand
Usuario.clase.php
Usuario.clase.php - Clic para expander<?php require_once '../datos/Conexion.clase.php'; class Usuario extends Conexion{ private $codigo; private $nombre; private $email; private $telefono; private $clave; public function getCodigo() { return $this->codigo; } public function getNombre() { return $this->nombre; } public function getTelefono(){ return $this->telefono; } public function getEmail() { return $this->email; } public function getClave() { return $this->clave; } public function setCodigo($codigo) { $this->codigo = $codigo; } public function setNombre($nombre) { $this->nombre = $nombre; } public function setEmail($email) { $this->email = $email; } public function setTelefono($telefono){ $this->telefono=$telefono; } public function setClave($clave) { $this->clave = $clave; } public function agregar() { $sql = "insert into usuario(nombre, email, movil, clave) values(:nom, :ema, :mov, :cla);"; $sentencia = $this->dblink->prepare($sql); $nombre = $this->getNombre(); $email = $this->getEmail(); $telefono = $this->getTelefono(); $clave = $this->getClave(); // $stmt->bindParam(':name', $userName); $sentencia->bindParam(":nom", $nombre ); $sentencia->bindParam(":ema", $email); $sentencia->bindParam(":mov", $telefono ); $sentencia->bindParam(":cla", $clave ); // $sentencia->bindParam(":fot", $this->getFoto() ); $resultado = $sentencia->execute(); if ($resultado != 1){ //ocurrio un error al insertar return FALSE; } //Insertó correctamente return TRUE; } public function listar(){ $sql = "SELECT * FROM usuario"; $sentencia = $this->dblink->prepare($sql); $sentencia->execute(); return $sentencia->fetchAll(PDO::FETCH_OBJ); } } ?>
Dentro de la carpeta web-services irán tres archivos
iniciar-sesion.php
iniciar-sesion.php - Clic para expander<?php if (isset($_POST["email"])){ $email = $_POST["email"]; }else{ $email = ""; } if (isset($_POST["clave"])){ $clave = $_POST["clave"]; }else{ $clave = ""; } $respuesta = null; if ( ! isset($_POST["email"])){ $respuesta = array( "estado"=>"error", "datos"=>"" ); echo json_encode($respuesta); exit(); } require_once '../negocio/Sesion.clase.php'; $objSesion = new Sesion(); if ($objSesion->iniciarSesion($email, $clave)){ $respuesta = array( "estado"=>"exito", "datos"=>array( "nombre"=>$objSesion->obtenerNombreUsuario($email), "email"=>$email, "codigo"=>$objSesion->obtenerCodigoUsuario($email) ) ); }else{ $respuesta = array( "estado"=>"error", "datos"=>"" ); } echo json_encode($respuesta); ?>
listar-usuario.php
listar-usuario.php - Clic para expander<?php require_once '../negocio/Usuario.clase.php'; $objUsuario = new Usuario(); $resultado = $objUsuario->listar(); $respuesta = array( "usuario"=>$resultado ); echo json_encode($respuesta); ?>
registrar-usuario.php
registrar-usuario.php - Clic para expander<?php if ( ( !isset( $_POST["nombre"] ) ) || ( !isset( $_POST["email"] ) ) || ( !isset( $_POST["movil"] ) ) || ( !isset( $_POST["clave"] ) ) ) { $respuesta = array( "estado"=>"error" ); echo json_encode($respuesta); exit(); } $nombre = $_POST["nombre"]; $email = $_POST["email"]; $telefono = $_POST["movil"]; $clave = md5($_POST["clave"]); require_once '../negocio/Usuario.class.php'; $objUsuario = new Usuario(); $objUsuario->setNombre($nombre); $objUsuario->setEmail($email); $objUsuario->setTelefono($telefono); $objUsuario->setClave($clave); if ($objUsuario->agregar()==TRUE){ $respuesta = array( "estado"=>"exito" ); }else{ $respuesta = array( "estado"=>"error" ); } //echo json_encode($respuesta); echo json_encode($respuesta); ?>
El resultado final de toda la wevservices debe ser como la siguiente imagen
Empezaremos ahora con la aplicación:
Empezamos por agregar el permiso en AndroidManifest
<uses-permission android:name="android.permission.INTERNET"/>
Luego debemos agregar la librería a nuestro build.gradle
compile'com.android.volley:volley:1.0.0'
Ahora empezaremos con la parte grafica de la app para lo cual utilizaremos un Button y un TextView.
activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" 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="com.androfast.server.appcursovolley.MainActivity"> <Button android:text="Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="115dp" android:id="@+id/btnOk" /> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/btnOk" android:layout_marginTop="137dp" android:id="@+id/txtListar" android:layout_alignParentStart="true" /> </RelativeLayout>
MainActivity
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.androfast.server.appcursovolley.datos.Conexion; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import java.util.Queue; public class MainActivity extends AppCompatActivity { TextView listarUsuario; Button ok; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listarUsuario=(TextView)findViewById(R.id.txtListar); ok=(Button)findViewById(R.id.btnOk); ok.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ listar(); } }); } public void listar(){ RequestQueue queue = Volley.newRequestQueue(MainActivity.this); StringRequest stringRequest = new StringRequest(Request.Method.POST, Conexion.URL_WEB_SERVICES + "listar-usuario.php", new Response.Listener<String>() { @Override public void onResponse(String response) { listarUsuario.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }){ }; queue.add(stringRequest); } }
Les recomiendo que vean el siguiente vídeo explicando cosas que no se puede explicar por este medio:
A continuación les dejo el ejercicio de la app descargar de aquí
Password: www.androfast.com
Volley:Login en mysql-curso parte 2
Volley: Registrar en mysql-curso parte 3
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!