Получить все изображения из FirebaseStorage в числовом порядке

#android #firebase #firebase-storage

#Android #firebase #firebase-хранилище

Вопрос:

У меня есть папка с именем «Notes» в моем хранилище Firebase, и в ней есть изображения с именами от 1 до 10.

1.jpg,2.jpg,3.jpg ….

Я хочу получить URL-адрес для загрузки их изображений и хочу отобразить его в моем viewpager.

В настоящее время я использую этот код.

  final StorageReference okref = mStorageRef.child("Notes/");

        okref.listAll().addOnSuccessListener(new OnSuccessListener<ListResult>() {
            @Override
            public void onSuccess(ListResult listResult) {
                for (StorageReference item : listResult.getItems()) {
                    item.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String URI = uri.toString();
                            arrayList.add(URI);
                            Toast.makeText(context, "Taks copmpleted",Toast.LENGTH_SHORT).show();

                        }
                    });
                }
  }
        });
  

Но, используя это, я получаю изображения в случайном порядке.Я хочу, чтобы порядок был 1.jpg затем 2.jpg затем 3.jpg…in мой просмотрщик

Я использую viewpager для ImageSlider.

Ответ №1:

getDownloadUrl() является асинхронным и не дает вам гарантии, в каком порядке он будет генерировать результат по сравнению с другими асинхронными вызовами getDownloadUrl() . Если вам нужен порядок для результатов, вам придется написать код, чтобы убедиться, что результаты имеют тот порядок, который вы ожидаете. Вы могли бы сделать это, выполнив итерацию с for циклом с целочисленным индексом и заполнив свой массив этим индексом. Общая форма этого решения может выглядеть следующим образом (это псевдокод и не будет компилироваться):

 items = listResult.getItems();
for (int i = 0; i < item.size(); i  ) {
    item = items[i];
    item.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            String URI = uri.toString();
            arrayList.set(i, URI);
        }
    });    
}
  

Убедитесь, что целочисленный индекс используется последовательно, чтобы решить, с каким элементом выполняется работа.

Комментарии:

1. Разве это не было бы проще с оператором concat map?

2. @AdityaKurkure Я не знаю, не так ли? Если у вас есть ответ, не стесняйтесь поделиться им здесь.