# #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) }