为什么我的图像没有显示在 recyclerview 中?
why is my image not showing in recyclerview?
我在 youtube 上学习了关于如何从 Firestore 检索图像和文本并将它们显示在 RecyclerView 中的教程。我正在使用 Glide 库来显示捕获的图像。我使用此代码绑定图像:
override fun onBindViewHolder(holder: itemViewHolder, position: Int) {
val produk=listOfItem[position]
holder.kategori.text=produk.productCategory
holder.berat.text=produk.productWeight.toString()
//img
Glide.with(context)
.load(produk.productIcon)
.into(holder.gambarBarang)
}
我尝试使用 FirebaseStorage 引用:
val storage = FirebaseStorage.getInstance()
val gsReference = storage.getReferenceFromUrl(produk.productIcon.toString())
Glide.with(context)
.load(produk.productIcon)
.into(holder.gambarBarang)
但这似乎让情况变得更糟,我得到这个错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.b1, PID: 8300
java.lang.IllegalArgumentException: The storage Uri could not be
parsed.
我还注意到我放入 imageView 中的一些图像不可见。这是插入的图像太大的结果吗?有人知道怎么解决吗?
编辑: 我尝试在 onBindViewHolder 中记录 produk.productIcon.toString(),并得到这个:
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@7e89f3c
gggg
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@213e98e
gggg
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@df9e78f
我认为 UploadTask 来自我用于将图像添加到 Firebase 存储的代码:
val filePathAndName="product_images/"+""+timeStamp
val storageReference=FirebaseStorage.getInstance().
getReference(filePathAndName)
val uploadTask= storageReference.putFile(image_Uri!!)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val downloadUri = task.result
val item = Item(
""+firebaseAuth.uid,
timeStamp,
kategori,
berat_sampah.toDouble(),
deskripsi,
""+downloadUri,
)
FirestoreClass().addItem(this@AddProductActivity, FirestoreClass().getCurrentUserID(),item)
ClearData()
这段代码是错误的原因吗?
produk.productIcon
不是 URL,实际上它是 UploadTask.TaskSnapshot
,这就是为什么它既不能被解析为存储引用也不能被解析为图像 URL.虽然我还不明白您从哪里获得 UploadTask(最好在那里进行更改),但我建议您使用 getDownloadUrl 获取 Task
,这将为您提供 URL 你需要传递给 Glide
。
它应该是这样的:
val storage = FirebaseStorage.getInstance()
storage.getReference(YOUR_STORAGE_PATH).getDownloadUrl()
.addOnSuccessListener(OnSuccessListener() {
// onSuccess method call
Glide.with(context)
.load(URL FROM LISTENER)
.into(holder.gambarBarang)
}
)
所以根据@Abdullah Z Khan 的回答,我注意到问题出在我的图像 uri 上。我使用 task.getResult 来获取 uri,但它却给我 taskSnapShot。
我在 youtube 上学习了关于如何从 Firestore 检索图像和文本并将它们显示在 RecyclerView 中的教程。我正在使用 Glide 库来显示捕获的图像。我使用此代码绑定图像:
override fun onBindViewHolder(holder: itemViewHolder, position: Int) {
val produk=listOfItem[position]
holder.kategori.text=produk.productCategory
holder.berat.text=produk.productWeight.toString()
//img
Glide.with(context)
.load(produk.productIcon)
.into(holder.gambarBarang)
}
我尝试使用 FirebaseStorage 引用:
val storage = FirebaseStorage.getInstance()
val gsReference = storage.getReferenceFromUrl(produk.productIcon.toString())
Glide.with(context)
.load(produk.productIcon)
.into(holder.gambarBarang)
但这似乎让情况变得更糟,我得到这个错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.b1, PID: 8300
java.lang.IllegalArgumentException: The storage Uri could not be
parsed.
我还注意到我放入 imageView 中的一些图像不可见。这是插入的图像太大的结果吗?有人知道怎么解决吗?
编辑: 我尝试在 onBindViewHolder 中记录 produk.productIcon.toString(),并得到这个:
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@7e89f3c
gggg
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@213e98e
gggg
D/TAG: com.google.firebase.storage.UploadTask$TaskSnapshot@df9e78f
我认为 UploadTask 来自我用于将图像添加到 Firebase 存储的代码:
val filePathAndName="product_images/"+""+timeStamp
val storageReference=FirebaseStorage.getInstance().
getReference(filePathAndName)
val uploadTask= storageReference.putFile(image_Uri!!)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val downloadUri = task.result
val item = Item(
""+firebaseAuth.uid,
timeStamp,
kategori,
berat_sampah.toDouble(),
deskripsi,
""+downloadUri,
)
FirestoreClass().addItem(this@AddProductActivity, FirestoreClass().getCurrentUserID(),item)
ClearData()
这段代码是错误的原因吗?
produk.productIcon
不是 URL,实际上它是 UploadTask.TaskSnapshot
,这就是为什么它既不能被解析为存储引用也不能被解析为图像 URL.虽然我还不明白您从哪里获得 UploadTask(最好在那里进行更改),但我建议您使用 getDownloadUrl 获取 Task
,这将为您提供 URL 你需要传递给 Glide
。
它应该是这样的:
val storage = FirebaseStorage.getInstance()
storage.getReference(YOUR_STORAGE_PATH).getDownloadUrl()
.addOnSuccessListener(OnSuccessListener() {
// onSuccess method call
Glide.with(context)
.load(URL FROM LISTENER)
.into(holder.gambarBarang)
}
)
所以根据@Abdullah Z Khan 的回答,我注意到问题出在我的图像 uri 上。我使用 task.getResult 来获取 uri,但它却给我 taskSnapShot。