Как получить список массивов изображений из облачного магазина FireStore в imageslider

# #java #android #firebase #google-cloud-firestore

Вопрос:

Я сохранил изображения в Firestore в виде списка массивов типа String, который имеет свой URL-адрес. Я хочу, чтобы эти изображения, хранящиеся в поле «изображения», были помещены в слайдер изображений с моделью слайдов, которая принимает ArrayList в качестве параметра.

Класс SlideModel имеет следующие переменные:

 private String imageUrl;
private Integer imagePath;
private ScaleTypes scaleTypes;
private String title;
 

Код, вставленный ниже, повторяет документы, а не поля конкретного документа

     db.collection("userimages").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {

            for (QueryDocumentSnapshot document : task.getResult()) 
                sliderDataArrayList.add(new SlideModel(document.getData().toString(), ScaleTypes.FIT));
                imageSlider.setImageList(sliderDataArrayList,ScaleTypes.FIT);
            }

        }
 

Ползунок изображения принимает ArrayList в качестве параметра и типа масштаба.

Этот код в слайдере изображений вводит документы в слайдер, а не в поле того документа, который содержит изображения.Изображение структуры данных в firestore

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

 final List<SlideModel> sliderDataArrayList = new ArrayList<>();
 

ПОЖАЛУЙСТА, ПРЕДЛОЖИТЕ МНЕ ЛУЧШИЙ СПОСОБ ОБОЙТИ ЭТО ИЛИ ОТВЕТ НА ЭТУ ПРОБЛЕМУ
Спасибо!

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

1. Итак, вам нужно получить все URL-адреса из всех документов?

2. я хочу получить все URL-адреса из одного документа в imageslider ..есть ли другой способ отображения нескольких изображений, если вы можете предоставить статью или документацию или источник, из которого я могу это реализовать. я предоставил изображение из firestore, как хранятся изображения

3. Вы говорите «из одного документа», из какого именно? Тот, который существует в root -> userimages -> NhVq ... SMSr ? Сохранили идентификатор документа в переменной?

4. Да, из этого документа»NhVq…. SMSr» и нет, я не сохранил идентификатор документа в переменной

5. Вы не против, если я дам вам ответ, используя кодированный идентификатор документа?

Ответ №1:

Согласно вашему комментарию, поскольку в ответе на получение данных в userimages массиве, который существует в NhVqAzmI6Cu9q8BTSMSr документе, вы говорите, что это «будет действительно полезно», тогда вы здесь.

Поскольку я не вижу ни одного класса , который содержит a List<String> , я создам его для вас:

 class DocumentClass {
    public List<String> images;
}
 

Теперь, чтобы получить нужный массив, нам нужно создать ссылку, которая указывает на NhVqAzmI6Cu9q8BTSMSr документ:

 FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference userImagesRef = rootRef.collection("userimages");
DocumentReference docRef = userImagesRef.document("NhVqAzmI6Cu9q8BTSMSr");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                DocumentClass documentClass = document.toObject(DocumentClass.class);
                List<String> images = documentClass.images;
                imageSlider.setImageList(images, ScaleTypes.FIT);
            } else {
                Log.d(TAG, "No such document");
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
});
 

Для получения дополнительной информации, пожалуйста, ознакомьтесь со следующей статьей:

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

1. Этот ответ, кажется, работает, но выдает ошибку » Не удается преобразовать объект типа java.lang. Строка для ввода com.denzcoskun.imageslider.models. Слайд-модель ‘

2. Скорее всего , вы определили список как тип SlideModel , что неверно. Вы должны определить его как строку, как в моем ответе выше. Попробуйте изменить это и скажите мне, работает ли это.

3. если я изменю его на List<String>, imageslider.setimageList примет в качестве параметра только List<String><SlideModel>, а файл ImageSlider и SlideModel будут файлом, доступным только для чтения, с зависимостью «реализация» com.github.denzcoskun:ImageSlideshow:0.1.0″»

4. ваш ответ мог бы сработать, если бы существовал способ редактирования этих файлов только для чтения или альтернативный, который, я думаю, заключается в создании другого класса/адаптера imageslider, который будет принимать List<String> в качестве параметра . Также спасибо за большую помощь, я поддержу это, так как ответ правильный, но не могу его применить

5. если вы все еще думаете, что это может сработать, дайте мне знать или какой-нибудь источник с помощью ImageSlider с firestore