java - 从Firebase数据库获取数据时如何准确知道未能转换其值的属性

标签 java android firebase firebase-realtime-database

当下一个数据库异常发生时,我能否知道属性未能转换值的具体原因是什么?当你处理嵌套了其他节点的大节点时,捕获属性是非常困难的!

W/System.err: com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to double

异常发生在第29行

"delivery_fees": "9"

发生错误的下一个 fragment 数据库结构

{
  ...
  "delivering_due_date": "09-08-2018 14:32:55",
  "delivery_day": "Tuesday",
  "delivery_end_time": "2018-05-29 14:12:11",
  "delivery_fees": "9",
  "delivery_payment_type": "Use Cash",
  "delivery_start_time": "2018-05-29 12:12:11",
  ...
}

最佳答案

如果您想确保字段具有所需的类型,请在 Firebase 数据库上设置规则以将字段限制为一种类型。在您的情况下,发生的情况是您期望来自数据库的整数/长值,但它作为字符串写入数据库。

尝试在客户端捕获期望并不理想。理想的解决方案是限制字段可以接受的数据。

规则介绍如下:https://firebase.google.com/docs/database/security/

这是 Firebase 团队提供的一个简单工具,可以轻松编写规则。 https://github.com/firebase/bolt

它可能看起来像是一个很长的解决方案,但它是一种让客户端免于猜测字段类型的写入方式。

关于java - 从Firebase数据库获取数据时如何准确知道未能转换其值的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52054567/

相关文章:

android - Firebase——错误 : Program type already present: com. google.api.AuthProviderOrBuilder

java - 尝试创建回文...如何比较 "output.charAt(k)"与原始 "output"字符串?

java - 在 list 文件中定义外部 jar 的正确方法

java - Android - DownloadManager - 清除队列中的旧下载

java - 自定义键盘抛出异常

swift - 如何从 Firebase 存储每个键有多个值的数据?

java - 什么是 notifyItemRangeChanged(0, this.data.size());在这个例子中,它是如何工作的?

java - Eureka检测服务状态

android - Firebase GoogleSignIn 无法通过 Play 商店提供发布版本

unity-game-engine - Firebase for Unity3d,始终测试模式身份验证 Unity 编辑器