Tengo una lista de imágenes con una carpeta separada que se carga directamente en la consola Fire-base. Quiero descargar esas imágenes en la aplicación para mostrarlas en la cuadrícula usando una API de almacenamiento.

Revisé esto https://firebase.google.com/docs/storage/ android / descargar-archivos pero esto es solo para descargar la imagen única y debe especificar un nombre para eso.

Básicamente, quiero obtener todas las imágenes con múltiples categorías que se almacenan en una carpeta separada en la consola.

2
Born To Win 13 nov. 2017 a las 12:57

2 respuestas

La mejor respuesta

Para descargar una imagen de Firebase Storage, primero debe tener la URL correspondiente de la imagen. Para descargar una imagen, se requieren más pasos:

  1. Sube la imagen a Firebase Storage.
  2. Guarde la URL correspondiente en Firebase Database mientras realiza la carga.
  3. Adjunte un oyente a la carpeta en la que guardó la imagen.
  4. Muestre la imagen.

Digamos que su estructura de Firebase Storage se parece a esto:

Storage-root
   |
   --- Photos
         |
         --- FolderNo1
         |      |
         |      --- image1.jpg
         |      |
         |      --- image2.jpg
         |
         --- FolderNo2
                |
                --- image3.jpg
                |
                --- image3.jpg

La estructura de base de datos correspondiente de tu base de datos de Firebase que almacena las URL de las imágenes debería verse así:

Firebase-root
   |
   --- Photos
         |
         --- FolderNo1
         |      |
         |      --- imageName1: imageUrl1
         |      |
         |      --- imageName2: imageUrl2
         |
         --- FolderNo2
                |
                --- imageName3: imageUrl3
                |
                --- imageName4: imageUrl4

Los nombres de las carpetas en la base de datos de Firebase pueden ser nombres simples (pero asegúrate de verificar la unicidad de los nombres al cargarlos) o pueden ser identificadores únicos aleatorios, en cuyo caso te recomiendo que uses el método push().

Si está guardando las imágenes a través de Firebase Console, no puede obtener la URL de la imagen, por eso debe hacerlo mediante programación.

La documentación de Firestore muestra cómo descargar una sola imagen porque incluso si descarga una sola imagen o más imágenes, el código es casi el mismo.

Si desea obtener todas las URL de una sola carpeta, utilice el siguiente código:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference folderRef = rootRef.child("Photos").child("FolderNo1");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String imageName = ds.getKey();
            String imageUrl = ds.getValue(String.class);
            list.add(imageUrl);
        }
        Log.d("TAG", list);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
folderRef.addListenerForSingleValueEvent(eventListener);

Si desea obtener todas las URL de todas las carpetas, utilice el siguiente código:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference photosRef = rootRef.child("Photos");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String imageName = ds.getKey();
            String imageUrl = ds.getValue(String.class);
            list.add(imageUrl);
        }
        Log.d("TAG", list);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
photosRef.addListenerForSingleValueEvent(eventListener);

En ambos casos, como probablemente verá, obtiene un List de URL. Con esta lista, ahora puede descargar las imágenes deseadas de acuerdo con la Documentación de Firebase Storage Office pero en lugar de usar una URL como se menciona allí, necesita usar una List de URL.

2
Alex Mamo 22 nov. 2017 a las 06:37

Necesita guardar la ruta y el nombre de la imagen en la base de datos en tiempo real en el momento de la carga de imágenes en la base de datos de base de fuego, entonces obtendrá todas las imágenes

Mostrando en la imagen de abajo

<code>enter image description here</code>

0
Gurupreet 20 nov. 2017 a las 10:05