Mostrando entradas con la etiqueta base de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta base de datos. 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:

jueves, 26 de mayo de 2016

llenar spinner en android desde una base de datos MySQL

Buenas hoy les traigo un nuevo tutorial, veremos como rellenar un spinner en android desde una base de datos en Mysqli
 bien las recomendaciones acostumbradas de siempre, lean de principio a final y tendrán ceros errores.


Que necesitamos para llenar nuestro spinner?
-paciencia
-un base de datos en mysql
-una web services en php y json
-una aplicación android

Bien empezamos por la base de datos se llamara, spinner 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

<?php 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="12345"; // Mysql password 
$db_name="frutas"; // Database name 
?>


Ahora nuestro listar.php
<?php
include_once './conexion.php';

    $respuesta = array();
    $respuesta["frutas"] = array();  

// Conectarse al servidor y seleccionar base de datos.
$con = mysqli_connect("$host", "$username", "$password")or die("cannot connect server "); 
mysqli_select_db($con,"$db_name")or die("cannot select DB");
$sql="SELECT * FROM frutas";
$result=mysqli_query($con,$sql);
    while($row = mysqli_fetch_array($result)){
        // Array temporal para crear una sola categoría
        $tmp = array();
        $tmp["id"] = $row["id"];
        $tmp["nombre"] = $row["nombre"];
        
        // Push categoría a final json array
        array_push($respuesta["frutas"], $tmp);
    }
    
    // Mantener el encabezado de respuesta a json
    header('Content-Type: application/json');
    
    //Escuchando el resultado de json
    echo json_encode($respuesta);
?>



Ahora nuestro agregar.php
<?php 
include_once './conexion.php';
 
    if (isset($_POST["nombre"]) && $_POST["nombre"] != "") {
        // variable respuesta array para json
        $respuesta = array();
        $nombre = $_POST["nombre"];
         
    $con = mysqli_connect("$host", "$username", "$password")or die("cannot connect server "); 
   mysqli_select_db($con,"$db_name")or die("cannot select DB");
 
        // mysql query
        $query = "INSERT INTO frutas(nombre) VALUES(
        '$nombre')";
        $result = mysqli_query($con,$query) or die(mysqli_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);
?>




Bien ya tenemos nuestra base de datos y nuestra webservices.
En nuestra aplicacion tendremos 3 archivos.java

Frutas.java
MainActivity.java
ServiceHandler.java

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.





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.



 

Copyright @ 2015 Android-facil.

Designed by Draganus | AndroidFacil