Obtener imágenes y metadatos desde el servidor PHP a android

Mi aplicación androide necesita buscar alguna información de un servidor php que aloja una base de datos MySQL. Funciona bien hasta ahora. El servidor codifica la información en JSON y la envía y luego puedo analizarla bien.

Pero ahora necesito también buscar una imagen junto con cada fila de la información que consigo del DB. La información que estoy recibiendo tiene un campo donde especifica la ruta donde se encuentra la imagen correspondiente en el sistema de archivos.

Así que, una vez que obtengo los caminos de las imágenes, ¿cómo las leo para poder enviarlas junto con las filas de información obtenidas? ¿Puedo codificar JSON las imágenes junto con la información? ¿O debo leerlos uno por uno con readfile una vez que tengo la información en la aplicación android? Si se puede hacer con JSON, ¿cómo analiza los datos de la imagen después? ¿Puede dar un ejemplo?

Una forma de obtener una imagen en textform sería usar base64 . Lo he utilizado con varios webservices y hay decodificadores para Android por ahí, en realidad. Hay uno en el código fuente desde el nivel 8 de la API. http://developer.android.com/reference/android/util/Base64.html pero ya que quiero apuntar a otros niveles, lo incluyo yo mismo. Una forma fácil sería entonces guardar la imagen en una base de datos como un archivo.

Esto es lo que hice para buscar las imágenes junto con los datos. Puedo publicarlo para que si puede ayudar a alguien.

Esta es la parte del script PHP que envía los datos en el lado del servidor:

$i=0; //$sql contains the result from the query of the data while($row=mysql_fetch_array($sql)){ $output[]=$row; //Here we fetch the image from the files table $query = "SELECT path, type FROM FILES WHERE poi_id = '" . mysql_real_escape_string(trim($output[$i][0])) . "'"; $r = mysql_query($query); $img = mysql_fetch_array($r); $bin = base64_encode_image($img[0]); //Let's append the image and the type to the data output. $output[$i]['img'] = $bin; $output[$i]['type'] = $img[1]; $i++; } //This method sends the response to the Android app //You can just use echo(json_encode($output)); RestUtils::sendResponse(200, json_encode($output), 'application/json'); 

Y luego en la aplicación para Android, después de analizar el JSON, puede guardar la cadena base64 como una imagen en el sistema de archivos de la siguiente manera:

 public void createImage(String image, String name){ try{ byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT); Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); FileOutputStream fos = openFileOutput(name, Context.MODE_WORLD_READABLE); img_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch(Exception e){ e.printStackTrace(); } } 

Para descargar la imagen de la ruta

  public void DownloadImageFromPath(String path){ InputStream in =null; Bitmap bmp=null; ImageView iv = (ImageView)findViewById(R.id.img1); int responseCode = -1; try{ URL url = new URL(path);//"http://192.xx.xx.xx/mypath/img1.jpg HttpURLConnection con = (HttpURLConnection)url.openConnection(); con.setDoInput(true); con.connect(); responseCode = con.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK) { //download in = con.getInputStream(); bmp = BitmapFactory.decodeStream(in); in.close(); iv.setImageBitmap(bmp); } } catch(Exception ex){ Log.e("Exception",ex.toString()); } } 
  • Cómo implementar una sencilla API de OAuth y servidor de Android
  • ¿Cómo puedo llamar correctamente a mi PHP webservice usando ksoap2-android?
  • Cómo enviar parámetros con archivo en android
  • Java.lang.String no se puede convertir a JSONObject desde Android
  • Autenticación de Firebase en el sitio web de wordpress
  • Android: Carga de un archivo en una página junto con otras cadenas POST
  • Envío de "alerta / notificación" al teléfono celular desde el sitio web
  • Volley de Android está enviando información dos veces con carga de imagen
  • Android devuelve cadena vacía HTTP
  • Cargar archivo de imágenes múltiples mediante HttpURLConnection
  • Android no procesar objeto JSON
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.