我目前正在做一个纸牌匹配游戏,我需要从数据库中检索两个图像,并将它们添加到位图数组中。我目前的代码在检索图像时给我错误。代码是:
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上所有能找到的东西,但没有任何东西能解决我的问题。
1条答案
按热度按时间5gfr0r5j1#
您正在从
addOnSuccessListener
填充bitmapArray
。这是 * 异步 * 发生的。当您按下按钮时,数组可能不包含给定索引处的条目,这可能是因为下载尚未完成或在addOnFailureListener
中以错误结束。您必须正确处理状态,并且至少在访问
bitmapArray
之前检查它。此外,似乎您在数组中只有两个图像,但有四个按钮试图基于索引进行访问--这将总是导致四个按钮中的两个出错。查看Firebase文档和Firebase用户界面:https://firebase.google.com/docs/storage/android/download-files#downloading_images_with_firebaseui