1

我正在尝试从我的 Firestore 数据库中获取图像 URL 以创建远程图像列表 (SlideModel) 并将它们显示在图像滑块中。我收到以下错误,应用程序崩溃。我不知道我做错了什么。

错误

    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 ->
            val adList: ArrayList<Ads> = 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 ->

        }
}

以下是我尝试在幻灯片中显示图像的方式。

    fun successAdListImageURL(adImageURL: ArrayList<Ads>){
    val remoteImages: ArrayList<SlideModel> = ArrayList()
    val numOfImage=adImageURL.size
    var i=1

    while (i<=numOfImage){
        remoteImages.add(SlideModel(adImageURL[i].image_url))
        i+=1
    }
    binding.imageSlider.setImageList(remoteImages, ScaleTypes.CENTER_INSIDE)
    binding.imageSlider.visibility=View.VISIBLE
}
4

1 回答 1

2

你检查过 numOfImage 的值是多少吗?

其实这样的循环在这里用起来不是很方便。在这种情况下,您不需要索引,因此您可以使用 forEach 循环。

而不是你的while循环,试试这个:

adImageURL.forEach{
remoteImages.add(SlideModel(it.image_url)
}
于 2021-10-28T06:53:34.863 回答