Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android com.firebase.client.FirebaseException:未能分析类为java.util.Date的节点_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android com.firebase.client.FirebaseException:未能分析类为java.util.Date的节点

Android com.firebase.client.FirebaseException:未能分析类为java.util.Date的节点,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试从Android更新Firebase对象。其中一个字段是日期 简单到: Map<String, Object> fields = new HashMap<String, Object>(); fields.put("endDate", new Date()); .... some more fields .... firebaseRef.updateChildren(fields); 当我用日期字段注释这一行时,所有其他字段都会正常更新 注意:“endDa

我正在尝试从Android更新Firebase对象。其中一个字段是日期

简单到:

Map<String, Object> fields = new HashMap<String, Object>();

fields.put("endDate", new Date());
.... some more fields ....

firebaseRef.updateChildren(fields);
当我用日期字段注释这一行时,所有其他字段都会正常更新


注意:“endDate”字段是我试图添加到现有对象的新字段。

Firebase存储JSON数据。JSON中没有表示日期的本机类型

开发人员通常选择其中一种表示方式作为日期:

  • 数字时间戳
  • 存储时间戳(自1970年1月1日以来的秒/毫秒数)的优点是它们是数字,因此可以很容易地进行比较

    将日期存储为字符串的优点是,可以轻松显示日期,而无需首先转换日期

    如果需要同时存储这两个属性,还可以以两种格式存储相关的日期/时间:时间戳和字符串

    Map<String, Object> fields = new HashMap<String, Object>();
    
    fields.put("endDate_timestamp", new Date().getTime());
    fields.put("endDate_string", new Date().toString());
    
    ref.updateChildren(fields);
    
    这样可以确保时间戳与在服务器上写入值的确切时刻相匹配

    相关的:


    Firebase存储JSON数据。JSON中没有表示日期的本机类型

    开发人员通常选择其中一种表示方式作为日期:

  • 数字时间戳
  • 存储时间戳(自1970年1月1日以来的秒/毫秒数)的优点是它们是数字,因此可以很容易地进行比较

    将日期存储为字符串的优点是,可以轻松显示日期,而无需首先转换日期

    如果需要同时存储这两个属性,还可以以两种格式存储相关的日期/时间:时间戳和字符串

    Map<String, Object> fields = new HashMap<String, Object>();
    
    fields.put("endDate_timestamp", new Date().getTime());
    fields.put("endDate_string", new Date().toString());
    
    ref.updateChildren(fields);
    
    这样可以确保时间戳与在服务器上写入值的确切时刻相匹配

    相关的:


    那么,为什么在创建对象时没有问题:firebaseRef.setValue(new MyOwnClass(new Date(),null,new Date());工作正常并保存日期。在创建对象时,firebase本身会将日期转换为时间。希望它在更新时也这样做并不不公平。
    setValue()
    updateChildren()
    之间的代码路径不同。前者比后者进行更多的转换,后者不允许任何非JSON类型。请参阅以了解更多关于这方面的信息(以及可能的其他解决方法)。那么,为什么在创建对象时没有问题:firebaseRef.setValue(new MyOwnClass(new Date(),null,new Date());工作正常并保存日期。在创建对象时,firebase本身会将日期转换为时间。希望它在更新时也这样做并不不公平。
    setValue()
    updateChildren()
    之间的代码路径不同。前者比后者进行更多的转换,后者不允许任何非JSON类型。有关这方面的更多信息(以及可能的其他解决方法),请参阅。
    fields.put("endDate_server_timestamp", ServerValue.TIMESTAMP);