Volley: Listar usuario en mysql-curso parte 1

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.

 

 

 

 

Como listar usuario con la libreria volley

listar_usuario_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 expander
CREATE 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 datosnegocio – 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:

modelo-N-capas

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

modelo-N-capas-php

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.

iniciar-sesión-volley

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

0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *