Как получить URL-адреса всех изображений, хранящихся в firebase в Android?

Я занимаюсь этим Android-проектом, в котором мне нужна помощь в получении всех URL-адресов, которые хранятся в хранилище Firebase, и отображении их всех в просмотре изображений. Проблема с данным кодом заключается в том, что он получает только один URL-адрес загрузки. Каким образом я могу получить все URL-адреса для всех изображений, хранящихся в Firebase. Вкратце: есть одно действие, в котором я сохраняю изображения в firebase, а в другом я хочу получить все изображения в Imageview. Как я могу это сделать? Спасибо

if(requestCode== GALLERY_INTENT && resultCode== RESULT_OK)
    {
          mProgress.setMessage("Uploading....");
          mProgress.show();
          Uri uri =data.getData();
        StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment());
        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                mProgress.dismiss();
                Uri downloadUri = taskSnapshot.getDownloadUrl();

                Picasso.with(MainActivity.this).load(downloadUri).fit().centerCrop().into(mImageView);
                Toast.makeText(MainActivity.this,"Upload done",Toast.LENGTH_LONG).show();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(MainActivity.this,"Upload  failed",Toast.LENGTH_LONG).show();
            }
        });
    }

person Rohit    schedule 19.05.2017    source источник


Ответы (2)


Я не думаю, что есть API для извлечения всех файлов, хранящихся в хранилище firebase. Когда я сохранял файлы, я сохранял метаданные файла, включая имя файла, URL-адрес загрузки и т. Д., В базе данных в реальном времени.

Поэтому, когда мне нужно было получить все файлы из хранилища, я бы использовал базу данных.

Редактировать :

Вот как я это сделал.

UploadTask uploadTask = storageRef.putBytes(data,storageMetadata);
    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {

        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
             //Save to database using
         //taskSnapshot.getMetadata().getCustomMetadata(StringKeys.SOME_KEY);
        }
    }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

        }
    });
person Dishonered    schedule 19.05.2017
comment
Вы можете предложить мне способ сделать это? - person Rohit; 19.05.2017

В Firebase в настоящее время нет вызова API, который может предоставить вам список всех файлов в Firebase Storage. Вместо этого вы можете сделать следующее. После загрузки изображения в Firebase Storage получить ссылку для загрузки этого изображения с помощью getDownloadUrl(); и сохранить ее в базе данных реального времени.


Для чтения или записи данных из базы данных вам понадобится экземпляр DatabaseReference:

private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

Чтобы сохранить ссылку загруженного изображения в базу данных в реальном времени, вам необходимо создать объект Java, например:

public class Image implements Serializable {
    public String downloadUrl;

    public Image() {
    }

    public Image(String dUrl) {
        this.downloadUrl = dUrl;
    }
}

Создав объект java, добавьте следующие строки кода в onSuccess(UploadTask.TaskSnapshot taskSnapshot):

Uri downloadUri = taskSnapshot.getDownloadUrl();
Image image = new Image(downloadUri.toString());
String userId = databaseReference.push().getKey();
databaseReference.child(userId).setValue(image);

Это добавит ссылку для загрузки этого изображения в базу данных в реальном времени. Теперь, когда вам нужен список всех изображений в вашем хранилище Firebase, просто используйте следующий код:

private ArrayList<Data> list;
...
private void getImagesList() {
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                Data data = new Data(childSnapshot.child("downloadUrl").getValue().toString());
                list.add(data);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}
person Harshil    schedule 25.09.2017