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.
- JSONException: No hay valor para id
- Acceso a la aplicación laravel desde la aplicación android con el token csrf
- Caracteres especiales entre la aplicación de Android y el script PHP
- Compruebe que el usuario abra el sitio en la aplicación o no
- Codificación / decodificación de datos entre php / java para android
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?
- Error de inicio de sesión y registro de la aplicación de Android
- php no está recibiendo datos que envió httppost en android
- ¿Hay alguna manera de escribir aplicaciones de Android en PHP?
- Validar la identificación de pago de Paypal aprobada por Android en el sitio de Magento
- Ejecutar Gps como servicio de fondo y enviar coordenadas al servidor web (PHP)
- Diferencia entre los conceptos
- Cómo comunicarse desde php a Android
- Cómo sincronizar datos entre la aplicación android y el servidor php?
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()); } }
- IPhone como cabezal deslizante, o: ¿cómo forzar el redibujo inmediato en el cambio de margen superior?
- Problema con el análisis de xml en la aplicación de teléfono