Получение исключения IndexOutOfBoundsException: Индекс: 1, Размер: 1 ошибка при попытке получить значение из Firestore и показать слайдер изображения

# #android #kotlin #google-cloud-firestore #androidimageslider

Вопрос:

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

Ошибка

 Process: com.abc.trad, PID: 2954 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1  at java.util.ArrayList.get(ArrayList.java:437)  at com.abc.trad.ui.fragments.DashboardFragment.successAdListImageURL(DashboardFragment.kt:625)  at com.abc.trad.firestore.FirestoreClass.getAdList$lambda-121(FirestoreClass.kt:1079)  at com.abc.trad.firestore.FirestoreClass.lambda$1fhZA5eTJEbDTBjX4GIWQgO1m6U(Unknown Source:0)  at com.abc.trad.firestore.-$Lambda$FirestoreClass$1fhZA5eTJEbDTBjX4GIWQgO1m6U.onSuccess(Unknown Source:4)  at com.google.android.gms.tasks.zzn.run(com.google.android.gms:play-services-tasks@@17.2.0:4)  at android.os.Handler.handleCallback(Handler.java:938)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:246)  at android.app.ActivityThread.main(ActivityThread.java:8633)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)  

Ниже приведен код, который я должен получить для получения данных из Firestore.

 fun getAdList(fragment: DashboardFragment) {  mFireStore.collection("ads")  .get()  .addOnSuccessListener { document -gt;  val adList: ArrayListlt;Adsgt; = ArrayList()  for (i in document.documents) {   val ad = i.toObject(Ads::class.java)  ad!!.ad_id = i.id  adList.add(ad)  }  fragment.successAdListImageURL(adList)   }.addOnFailureListener { e -gt;   } }  

Ниже показано, как я пытаюсь показать изображения в слайд-шоу.

 fun successAdListImageURL(adImageURL: ArrayListlt;Adsgt;){  val remoteImages: ArrayListlt;SlideModelgt; = ArrayList()  val numOfImage=adImageURL.size  var i=1   while (ilt;=numOfImage){  remoteImages.add(SlideModel(adImageURL[i].image_url))  i =1  }  binding.imageSlider.setImageList(remoteImages, ScaleTypes.CENTER_INSIDE)  binding.imageSlider.visibility=View.VISIBLE }  

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

1. В программировании количество начинается с 0 🙂

2. Это решило проблему 😉 . Изначально он был равен 0, а когда по какой-то причине он не работал, где-то посередине я изменил его на 1. Теперь я изменил его обратно на 0 и удалил ‘=’ из while . Теперь это работает.

Ответ №1:

Вы проверили, какова ценность numOfImage?

На самом деле, такую петлю здесь использовать не очень удобно. В этом случае вам не нужен индекс как таковой, и поэтому вы можете использовать цикл forEach.

Вместо вашего цикла «время» попробуйте это:

 adImageURL.forEach{ remoteImages.add(SlideModel(it.image_url) }