AndroidKotlinFirebase如何同时检索两个图像并将它们添加到位图数组中?

aydmsdu9  于 2022-12-19  发布在  Kotlin
关注(0)|答案(1)|浏览(114)

我目前正在做一个纸牌匹配游戏,我需要从数据库中检索两个图像,并将它们添加到位图数组中。我目前的代码在检索图像时给我错误。代码是:

val aDatabase = FirebaseStorage.getInstance().getReference("all/$imageID1.jpg")
val sDatabase = FirebaseStorage.getInstance().getReference("all/$imageID2.jpg")

try {
    val localfile = File.createTempFile("tempfile", ".jpg")
    aDatabase.getFile(localfile).addOnSuccessListener {
        val bitmap = BitmapFactory.decodeFile(localfile.absolutePath)
        bitmapArray.add(bitmap)
    }.addOnFailureListener {
        Log.w("myapplication", "ERROR RETRIEVING IMAGE")
        Toast.makeText(this, "ERROR RETRIEVING IMAGE", Toast.LENGTH_SHORT).show()
    }
} catch (e: Exception) {
    e.printStackTrace()
}

try {
    val localfile = File.createTempFile("tempfile1", ".jpg")
    sDatabase.getFile(localfile).addOnSuccessListener {
        val bitmap = BitmapFactory.decodeFile(localfile.absolutePath)
        bitmapArray.add(bitmap)
    }.addOnFailureListener {
        Log.w("myapplication", "ERROR RETRIEVING IMAGE")
        Toast.makeText(this, "ERROR RETRIEVING IMAGE", Toast.LENGTH_SHORT).show()
    }
} catch (e: java.lang.Exception) {
    e.printStackTrace()
}

        ///    DUPLICATE
bitmapArray.addAll(bitmapArray);
        ///SHUFFLE
bitmapArray.shuffle()

button1 = findViewById<ImageButton>(R.id.imageButton1)
button2 = findViewById<ImageButton>(R.id.imageButton2)
button3 = findViewById<ImageButton>(R.id.imageButton3)
button4 = findViewById<ImageButton>(R.id.imageButton4)
buttons = listOf<ImageButton>(button1, button2, button3, button4)

buttons.forEachIndexed { index, button ->
   button.setOnClickListener(View.OnClickListener {
      button.setImageBitmap(bitmapArray[index])
            })

当我尝试使用onClick向ImageButton添加图像时,它只会给我一个错误消息java.lang.IndexOutOfBoundsException:索引:0,大小:0。我试图创建的是一个卡匹配游戏,这是2X2,因此,为什么我得到2图像从FireBase存储。
到目前为止,我已经尝试了stackoverflow上所有能找到的东西,但没有任何东西能解决我的问题。

5gfr0r5j

5gfr0r5j1#

您正在从addOnSuccessListener填充bitmapArray。这是 * 异步 * 发生的。当您按下按钮时,数组可能不包含给定索引处的条目,这可能是因为下载尚未完成或在addOnFailureListener中以错误结束。
您必须正确处理状态,并且至少在访问bitmapArray之前检查它。此外,似乎您在数组中只有两个图像,但有四个按钮试图基于索引进行访问--这将总是导致四个按钮中的两个出错。
查看Firebase文档和Firebase用户界面:https://firebase.google.com/docs/storage/android/download-files#downloading_images_with_firebaseui

相关问题