android - 尝试将 downloadUri 添加到 Firestore 文档时出错。 "Could not serialize object. Exceeded maximum depth of 500"

标签 android firebase kotlin google-cloud-firestore

我有一个 Firestore 集合,其中每个文档都有一个与之关联的图像,该图像存储在 Firebase 存储中。以前我存储图像引用并通过它检索图像,但由于每次调用都需要一些时间,我尝试切换到存储 downloaduri 以便使用 picasso 我可以通过 downloaduri 引用它而不必每次都检索 downloaduri元素。但是,当我尝试在 getdownloaduri 的 on success 监听器中写入文档时,我收到一个错误指示对象循环。

如果我不包含对数据库的更新,代码能够成功检索 downloaduri 并将其传递给 recyclerview 并显示图像,只有在尝试将其上传到数据库时我才会得到这个错误。我已经尝试在 dowonloadUri.addonsuccesslistenr 之外更新数据库,但是我在监听器中设置的值永远不会在监听器之外更新。

 if(menucarditem.dluri == null)
                        {
                            val storageRef = storage.reference
                            val pathReference = storageRef.child(menucarditem.img)
                            pathReference.downloadUrl.addOnSuccessListener {
                                menucarditem.dluri = it
                                dbMealItem.dluri = it
                                db.collection("menuitems").document(dbMealItem.CatererId + dbMealItem.name).set(dbMealItem).addOnSuccessListener {  }
                                    .addOnFailureListener { }

                           viewAdapter.notifyDataSetChanged()

                            }
       .addOnFailureListener{
                                    Toast.makeText(this, "Image from database not found", Toast.LENGTH_LONG).show()
                                    Log.w(TAG, "Error getting documents: ", it)
                                }
}

运行时输出的错误是:

E/AndroidRuntime: java.lang.IllegalArgumentException: Could not serialize object. Exceeded maximum depth of 500, which likely indicates there's an object cycle (found in field 'dluri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonicalUri.canonica

等等

最佳答案

问题出在数据类型 Uri downloadUri = task.getResult(); 返回 uri 中。但可能在 firestore DB 中需要字符串。因此,在更新到 firestore 之前,将 downloadUri 更改为字符串:

Uri downloadUri = task.getResult();
String uri = downloadUri.toString();
db.collection("menuitems").document(dbMealItem.CatererId + dbMealItem.name).set(**uri**);

关于android - 尝试将 downloadUri 添加到 Firestore 文档时出错。 "Could not serialize object. Exceeded maximum depth of 500",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138163/

相关文章:

android - 将像素转换为 sp

ios - ld : framework not found GRPCClient

java - 如何在android中实现滑动 View

android sqlite 查询返回带有 0 个结果的游标

Android 多人游戏与套接字编程

java - Android - 当前正在运行的 Activity

android - Fragment 是无限创造的

java - 如何在 Firebase 实时数据库中减去两个不同的节点子值?

firebase - 如何在 Firebase 托管上部署 Streamlit Python 应用程序?

android - 如何根据名称获取鸡尾酒列表