【问题标题】:why is my image not showing in recyclerview?为什么我的图片没有显示在 recyclerview 中?
【发布时间】:2021-10-10 01:40:15
【问题描述】:

我遵循 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.toString()Uri吗?
  • @Zain,是的,我可以访问它
  • 如果你尝试在 onBindViewHolder 中使用Log.d("TAG", produk.productWeight.toString()),输出是什么?请回复@AlexMamo
  • @AlexMamo,我已经在上面的编辑部分添加了日志结果

标签: android kotlin google-cloud-firestore imageview firebase-storage


【解决方案1】:

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

【讨论】:

  • 嗯,UploadTask 来自我负责将文档添加到 Firestore 的代码。这是否意味着我将错误的图片 uri 上传到 Firestore?
  • 提供的 sn-p 看起来不错,所以我不完全确定。据我所知,putFile 快照没有此处指定的结果值:firebase.google.com/docs/reference/android/com/google/firebase/…,因此可能以某种方式将实际任务设置为该值。你能提供 Item 类吗?
【解决方案2】:

因此,根据@Abdullah Z Khan 的回答,我注意到问题出在我的图像 uri 上。我使用 task.getResult 来获取 uri,但它给了我 taskSnapShot。

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多