Guardar imagenes desde Android en base de datos externa

Guardar imagenes desde Android en base de datos externa

Buen día! El día de hoy vamos a ver un sencillo pero bastante útil ejemplo sobre como guardar imágenes desde android en base de datos externa, esta base de datos sera una mysql y conectara directamente con la base de datos para guardar la imagen en una tabla. Este articulo bien podría llamarse como hacer peticiones http con post desde android a un archivo php pues es la forma en la que conectaremos con el archivo php para guardar la imagen en base de datos, te animas?

Solicitar imágenes en Android

Lo primero que tenemos que hacer es solicitar al usuario seleccionar una imagen, la cual posteriormente se guardara en la base de datos, para esto obviamente lo tendremos que hacer en entorno android.

Dentro del código de cualquier botón de tipo «Elegir imagen» colocamos el siguiente código:

showFileChooser(1);

para llamar el cuadro de elegir archivos de android. Pasamos un numero de parámetro solo para identificar el uso de esta llamada al file chooser.

Ya dentro del código del filechooser tenemos..

private void showFileChooser(int caso) {
Intent intent;
switch(caso){
case 1:
//imagen
intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("image/*"); 
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Selecciona una imagen"),1);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(this, "Instala un manejador de archivos para acceder a esta función.", Toast.LENGTH_SHORT).show();
}
break;
case 2:

..
}

Establecemos que el file chooser puede ver archivos de imagen e invocamos el método startActivityForResult que lanza el file chooser y manda el resultado a otra función conocida como onActivityResult en la cual conoceremos el resultado de la operación. En el método startActivityForResult pasamos un tercer parámetro que es el encargado de enlazar con la función onActivityResult para saber que ese resultado es de esta llamada.


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy

Obteniendo la imagen

El método onActivityResult seria algo como lo siguiente..

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
InputStream stream;
try {
stream = getContentResolver().openInputStream(data.getData());
imagen = BitmapFactory.decodeStream(stream);
stream.close();
imagen = Bitmap.createScaledBitmap(imagen, 500, 400, true);
if(imagen== null){
Toast.makeText(getApplicationContext(), "imagen vacia", Toast.LENGTH_SHORT).show();
}else{
uploadImage(); 
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Ocurrio un problema al guardar tu imagen.", Toast.LENGTH_SHORT).show();
}
}
break;
case 2:
..
super.onActivityResult(requestCode, resultCode, data);
}

Aqui obtenemos el código de la imagen seleccionada, la recortamos a un tamaño de 500 x 400, checamos si viene nula y si todo va bien mandamos llamar un método llamado uploadImage();

Realizando la petición http post con php

Ahora es tiempo de realizar la petición http por método post para mandar el código de la imagen a un archivo php.

Como este proceso bloque la UI de android tenemos que hacerlo mediante un proceso asíncrono, es por eso que haremos uso de la clase AsyncTask de android.

private void uploadImage(){
class UploadImage extends AsyncTask<bitmap,void,string>{

ProgressDialog loading;
RequestHandler rh = new RequestHandler();

@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(Main.this, "Guardando imagen..", "Por favor espera...",true,true);
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
}

@Override
protected String doInBackground(Bitmap... params) {
Bitmap bitmap = params[0];
String uploadImage = getStringImage(bitmap,2);

HashMap<string,string> data = new HashMap<string, string="">();
data.put("clave","valor");
data.put("clave2","valor2");
data.put("imagen", uploadImage);

String result = rh.sendPostRequest("URL AL PHP",data);

return result;
}
}

UploadImage ui = new UploadImage();
ui.execute(imagen);
}

En esta clase el proceso se divide en 3 fases: preExecute, que aprovechamos para mostrar un progressDialog para mostrar al usuario que se esta trabajando.. doInBackground: hace el trabajo pesado de la conexión al archivo php mediante RequestHandler y HashMap para enviar parámetros.. postExecute: cierra el progressDialog y muestra un Toast con el texto que regresa el archivo php («Imagen guardada exitosamente»).

Guardando la imagen en base de datos con PHP

Codigo para guardar la imagen con php.

Concluyendo

Ahora sabemos como solicitar archivos, en este caso imágenes, al usuario desde android, también aprendimos como realizar procesos largos que bloquean la UI sin que esto suceda mediante la clase AsyncTask, como realizar una petición http por método post a un archivo php y desde este guardar la imagen en una base de datos.

Hasta la próxima!

Clic para valorar esta información
[Total: 0 Promedio: 0]