Mostrando entradas con la etiqueta mysql. Mostrar todas las entradas
Mostrando entradas con la etiqueta mysql. Mostrar todas las entradas

jueves, 13 de abril de 2017

como subir una imagen desde android a una base de datos en mysql

Hola amigos y amigas programadores les traigo un nuevo tutorial de como subir una imagen desde android a una base de datos en mysql.
A pedido de un subscriptor de youtube vamos hacerlo, algo rápido porque ando de vacaciones, si no les queda muy claro solo me escriben:

PASO: 1   Crear nuestra Web Services

Bien para este tuto haremos nuestra ws en la nube :)  utilizare el hosting gratuito webcindario:
y debemos crear nuestra base de datos con tres campos, como se muestra en la siguiente imagen


Ahora debemos crear nuestro archivo dbConnect.php
<?php 
 
 define('HOST','mysql.webcindario.com');
 define('USER','usuario del hosting');
 define('PASS','pass del usuario');
 define('DB','nombre de base de datos');
 
 $con = mysqli_connect(HOST,USER,PASS,DB) 
 or die('unable to connect to db');


Recuerda que los datos debes cambiarlo según el lugar donde tengas tu base de datos:
Ahora debemos de crear nuestro archivo upload.php
<?php
 
 if($_SERVER['REQUEST_METHOD']=='POST'){
 
 $imagen= $_POST['foto'];
                $nombre = $_POST['nombre'];
 
 require_once('dbConnect.php');
 
 $sql ="SELECT id FROM frutas ORDER BY id ASC";
 
 $res = mysqli_query($con,$sql);
 
 $id = 0;
 
 while($row = mysqli_fetch_array($res)){
 $id = $row['id'];
 }
 
 $path = "uploads/$id.png";
 
 $actualpath = "http://servermorefast.webcindario.com/ImagenConNombre/$path";
 
 $sql = "INSERT INTO frutas (foto,nombre) VALUES ('$actualpath','$nombre')";
 
 if(mysqli_query($con,$sql)){
 file_put_contents($path,base64_decode($imagen));
 echo "Subio imagen Correctamente";
 }
 
 mysqli_close($con);
 }else{
 echo "Error";
 }

 Esos dos archivos deben subirlo a su hosting o servidor local y aparte deben crear una carpeta llamada uploads donde se guardara las imágenes y quedara como en la siguiente imagen.




PARTE 2: Ahora toca meter mano a la aplicación en android, nuestro activity_main.xml tendra lo siguiente

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:orientation="vertical"
    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">


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Elegir imagen"
        android:id="@+id/btnBuscar" />


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/imageView" />


    <EditText
        android:id="@+id/editText"
        android:hint="Ingresa un Nombre"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Subir Imagen"
        android:id="@+id/btnSubir" />


</LinearLayout>


Y por ultimo nuestro MainActivity.java 

public class MainActivity extends AppCompatActivity implements View.OnClickListener  {

    private Button btnBuscar;
    private Button btnSubir;

    private ImageView imageView;

    private EditText editTextName;

    private Bitmap bitmap;

    private int PICK_IMAGE_REQUEST = 1;

    private String UPLOAD_URL ="http://servermorefast.webcindario.com/upload.php";

    private String KEY_IMAGEN = "foto";
    private String KEY_NOMBRE = "nombre";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnBuscar = (Button) findViewById(R.id.btnBuscar);
        btnSubir = (Button) findViewById(R.id.btnSubir);

        editTextName = (EditText) findViewById(R.id.editText);

        imageView  = (ImageView) findViewById(R.id.imageView);

        btnBuscar.setOnClickListener(this);
        btnSubir.setOnClickListener(this);
    }

    public String getStringImagen(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }

    private void uploadImage(){
        //Mostrar el diálogo de progreso
        final ProgressDialog loading = ProgressDialog.show(this,"Subiendo...","Espere por favor...",false,false);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        //Descartar el diálogo de progreso
                        loading.dismiss();
                        //Mostrando el mensaje de la respuesta
                        Toast.makeText(MainActivity.this, s , Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //Descartar el diálogo de progreso
                        loading.dismiss();

                        //Showing toast
                        Toast.makeText(MainActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Convertir bits a cadena
                String imagen = getStringImagen(bitmap);

                //Obtener el nombre de la imagen
                String nombre = editTextName.getText().toString().trim();

                //Creación de parámetros
                Map<String,String> params = new Hashtable<String, String>();

                //Agregando de parámetros
                params.put(KEY_IMAGEN, imagen);
                params.put(KEY_NOMBRE, nombre);

                //Parámetros de retorno
                return params;
            }
        };

        //Creación de una cola de solicitudes
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Agregar solicitud a la cola
        requestQueue.add(stringRequest);
    }

    private void showFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri filePath = data.getData();
            try {
                //Cómo obtener el mapa de bits de la Galería
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                //Configuración del mapa de bits en ImageView
                imageView.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onClick(View v) {

        if(v == btnBuscar){
            showFileChooser();
        }

        if(v == btnSubir){
            uploadImage();
        }
    }
}


Ahora debemos agregar la libreria volley a dependencias en buil.gradle

compile 'com.mcxiaoke.volley:library-aar:1.0.0'


quedaría algo así




dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}

Y por ultimo un permiso en el androidManifest

<uses-permission android:name="android.permission.INTERNET"/>


El producto final seria lo siguiente:

EN EL ANDROID

   




EN EL SERVIDOR


Las imágenes se guardan en la BD con el nombre original y en la carpeta uploads con un numero, de esa forma aunque se repitan de nombre las fotos, no se chancaran al momento de cargarlos.


Igual si piensas que hablo escribo en chino te dejo el ejercicio:

  Link de la descarga
Programador alfa, lomo plateado, barba de clavos, mentón de roca, no descarga la aplicación sigue el tutorial. Clic para DESCARGAR

     
ENLACES DE INTERÉS:

miércoles, 1 de junio de 2016

Como agregar y listar en un listview usando una services en php y android

Buenas hoy veremos un nuevo tutorial y para esto partiremos de otros tutoriales ya antes hechos.
Hoy veremos como agregar y listar en un mismo listview usando una base de datos en mysql y android.



Si eres nuevo por favor deverias de ver los siguientes tutoriales.
Mostrar datos en un ListView extraido de una base de datos en Postgresql


llenar spinner en android desde una base de datos MySQL



Bien empezamos por la base de datos se llamara, spinner  así lo llame la ves pasada ustedes pueden llamenle lista o como quieran y contendrá lo siguiente.

  CREATE TABLE IF NOT EXISTS `frutas` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `nombre` varchar(90) NOT NULL,
    PRIMARY KEY (`id`),
   UNIQUE KEY `id` (`id`)
  );
 
 INSERT INTO `frutas` (`id`, `nombre`) VALUES
  (48, 'manzana'),
 (49, 'uva'),
 (50, 'papaya'),
 (51, 'mango');


Bueno ahora seguimos con nuestra webservice, tendrá la siguiente estructura.






crearemos primero la conexion.php
  define('DB_USERNAME', 'root');
  define('DB_PASSWORD', '12345');
  define('DB_HOST', 'localhost');
  define('DB_NAME', 'spinner');

Ahora crearemos nuestra DbConnect.php 


<?php 
  /**
   * Connecting / disconnecting Database
   *
   * @author AndroidMorefast
   */
  
  
  class DbConnect {
     
     private $conn;
 
     // constructor
     function __construct() {
         
         // conexion a la database
         $this->connect();
     }
 
     // destructor
     function __destruct() {
         // cerrar la conexion
         $this->close();
     }
 
     /**
      * Estableciendo database conexion
      * @return database handler
      */
     function connect() {        
         include_once dirname(__FILE__) . './conexion.php';
         
         // conectando con mysql database
         $this->conn = mysql_connect(DB_HOST, DB_USERNAME, 
         DB_PASSWORD) or die(mysql_error());
 
         // seleccionar database
         mysql_select_db(DB_NAME) or die(mysql_error());
         
         // returing conexion resource
         return $this->conn;
     }
 
     /**
      * cerrar database conexion
      */
     function close() {
         // cerrar db conexion
         mysql_close($this->conn);
     }
 
 }
 ?>


Ahora nuestro listar.php
<?php 
 include_once './DbConnect.php';
 
 function getCategories(){
     $db = new DbConnect();
     // array para json 
     $respuesta = array();
     $respuesta["frutas"] = array();
     
     // extraemos las frutas con la query
     $result = mysql_query("SELECT * FROM frutas");
     
     while($row = mysql_fetch_array($result)){
         // array temporal para crear una sola fruta
         $tmp = array();
         $tmp["id"] = $row["id"];
         $tmp["nombre"] = $row["nombre"];
         
         
         array_push($respuesta["frutas"], $tmp);
     }
     
     // manteniendo cabecera de respuesta a JSON
     header('Content-Type: application/json');
     
     // haciéndose echo al resultado en JSON
     echo json_encode($respuesta);
 }
 
 getCategories();
 ?>

Ahora nuestro agregar.php
<?php 
 include_once './DbConnect.php';

 function agregar() {
     if (isset($_POST["nombre"]) && $_POST["nombre"] != "") {
         // variable respuesta array para json
         $respuesta = array();
         $nombre = $_POST["nombre"];
         
         $db = new DbConnect();
 
         // mysql query
         $query = "INSERT INTO frutas(nombre) VALUES(
         '$nombre')";
         $result = mysql_query($query) or die(mysql_error());
         if ($result) {
             $respuesta["error"] = false;
             $respuesta["message"] = "nueva fruta creado con 
             exito!";
         } else {
             $respuesta["error"] = true;
             $respuesta["message"] = "Creacion de nueva 
             fruta fallida!";
         }
     } else {
         $respuesta["error"] = true;
         $respuesta["message"] = "Nombre de la fruta no se 
         encuentra!";
     }
     
     // echo json respuesta
     echo json_encode($respuesta);
 }
 
 agregar();
 ?>


Dentro de la aplicacion android deben configurar la ip o dirección de su webservice dentro de MainActivity

Como de costumbre les dejare el archivo del código android, todo esta documentado, si tienen dudas al respecto me dejan un comentario.





martes, 31 de mayo de 2016

Como limpiar un arreglo (error de duplicar mi lista al agregar)

Buenas hoy, vamos a observar un error muy común en las personas que siempre copian código y lo adaptan a sus necesidades e ignoran como gestionar los arreglos.
Estos errores dan las siguientes incógnitas:

Como limpiar mi spinner en android?
Como limpiar mi listview en android?
mi aplicación en android me duplica mi lista en el listview?

Y luego empiezan a buscar tutoriales en donde les dices que deben usar lo siguiente:

spinner.setAdapter(null);

listView.setAdapter(null);

spinner.setAdapter(m_adapterForSpinner);

Y el problema persiste, y cada ves que intentan agregar un nueva lista, la lista anterior se agrega a la nueva dando una lista de items duplicados, aunque en nuestra base de datos no hay registro de publicación. Como se muestra la siguiente imagen.


Solución:

Bien en este caso si estas llenado tu listview, spinner etc con un array, es recomendable limpiar el array. Seria algo así.

                                   ListaArray.clear();
    




miércoles, 25 de mayo de 2016

Mostrar datos en un ListView extraido de una base de datos en Postgresql

Hola de nuevo hoy vamos aprender a extraer los datos de una base de datos hecha en postgresql mediante una webservice.


Que necesitamos?

Necesitamos una webservice
*conexion.php
*lista.php

Necesitamos una aplicación Android
*MainActivity.java
*JSONParser.java

Necesitamos una base de Datos hecha en PostgreSql
*tabla persona

Bien hoy empezaremos nuestra base de datos, donde tendremos nuestro banco de datos de los datos de la tabla persona. Nuestra base de datos se llamara BD_persona



CREATE TABLE persona
(
  id_persona serial NOT NULL,
  nombre character varying(120) NOT NULL,
  direccion character varying(90) NOT NULL,
  edad integer NOT NULL,
  CONSTRAINT id_persona_pkey PRIMARY KEY (id_persona)
)


Ahora crearemos nuestra webservices



Crearemos nuestra conexion.php que contendrá lo siguiente.



<?php 
//variables para la coneccion
   $host= "localhost";
   $user= "postgres";
   $database="BD_persona";
   $password ="12345";
 
   $conexion=pg_connect("host=$host user=$user 
   dbname=$database password=$password");
 
 
   //si fallara la conexion con la BD
   if (!$conexion) {
    echo "error en la conexion";
   }else{
 
    //echo 'conexion correctamente';
   }
 ?>




Ahora crearemos nuestra lista.php


<?php 
           // incluimos la conexion
            include 'conexion.php';
 
 
 $query="select * from persona;";
 
 $result=pg_query($conexion, $query);
 $rows=pg_num_rows($result);
 
     $arraypersona = array();
 while ($tablas=pg_fetch_assoc($result)) {
 
            $arraypersona[]=$tablas;
  }
  echo json_encode($arraypersona);
 ?>


Bien ya tenemos nuestra webservice y nuestra base de datos ahora hay que crear nuestra aplicación android

Nuestra aplicación tendrá un listview llamado list


También un archivo items.xml si no sabes como crear te dejo una guia como crear archivos xml
también habrá 2 clases .java. 
*MainActivity.java
*JSONParser.java
No olviden cambiar la ip de su webservice que lo encontrara en el archivo MainActivity.java

Bien a continuación les dejare el archivo de Android  y sus respectivas clases.



lunes, 23 de mayo de 2016

Eliminar usuario php.mysql en android

Hola de nuevo, hoy veremos como eliminar un usuario en php, mysql en android si es la primera vez que ingresas al blog te recomiendo que leas antes los siguientes artículos, porque este es la continuación de los mismos, donde encontraras la base de datos y otros archivos.

2-Listar Usuario usando php,mysql y android
3- Actualizar Usuario usando php,mysql en android

bien una ves que ya tienen la lógica, empezaremos a crear nuestra web services para hacer el eliminar usuario. Bien en nuestra aplicación android teníamos tres botones el registrar, listar y el actualizar, ahora agregaremos un botón mas, que sera el eliminar y deberá quedar como muestro en la imagen.



Entonces debemos agregar un nuevo archivo el eliminar.php Hasta ahora nuestra webServices debería tener esta estructura.




El eliminar.php tendrá lo siguiente. (si no puedes ver bien as clic en la imagen)













Una ves ya creada la parte de la WS, nos enfocaremos en la parte Android
hemos creado nuestro método eliminar, para hacer conexión a nuestra WS

Ahora si, vamos a ver nuestro AsyncTask:
> El resultado es como les dejo en la imagen siguiente , primero clic botón mostrar, o escribir algún dni que este en nuestra base de datos y eliminar.


En caso se me escape algo les dejare el archivo en android


Me escriben aquí abajo si tienen alguna duda o a la pagina del facebook para contestarles lo mas breve posible.

 

Copyright @ 2015 Android-facil.

Designed by Draganus | AndroidFacil