我有一个Firestore集合,其中每个文档都有与之关联的图像,该图像存储在Firebase存储器中。以前,我存储图像引用并通过该图像检索图像,但是由于每次调用都花费一些时间,因此我尝试切换到存储downloaduri,以便使用Picasso可以通过downloaduri对其进行引用,而不必每次都检索downloaduri。物品。但是,当我尝试在getdownloaduri的on成功监听器中写入文档时,出现指示对象周期的错误。
如果我不包括对数据库的更新,则代码能够成功检索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)
}
}
运行时输出的错误是:
等等。
最佳答案
问题出在数据类型Uri downloadUri = task.getResult();
return 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/