【问题标题】:Fetching data from firebase within android从android中的firebase获取数据
【发布时间】:2020-01-29 11:25:12
【问题描述】:

如果我将我的数据存储在 firebase 中,如下所示:

{
    "sensor_data": {
      "duration": 41143403,
      "activity": "unknown"
    },
    "sensor_name": "Activity",
    "timestamp": {
      "start_time": "Mon Mar 6 00:00:00 EST 2017",
      "end_time": "Mon Mar 6 11:25:44 EST 2017"
    }
  },

我想通过输入字符串输入来获取 sensor_data 对象中的持续时间值,将该字符串输入与时间戳对象中的 start_time 值进行比较。怎么可能执行这样的查询?字符串输入是否必须与 start_time 值完全匹配?

【问题讨论】:

    标签: android firebase


    【解决方案1】:

    Firebase 可以执行范围查询,甚至可以对字符串执行此操作。但它会比较字符串开头的值。因此,在您的 start_time 格式中,这意味着您可以在 3 月 6 日星期一搜索所有项目,例如:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(...);
    ref.orderByChild("timestamp/start_time").startAt("Mon Mar 6").endAt("Mon Mar 6~")...
    

    但无法获取 3 月 6 日至 7 日的子笔记,因为这些笔记以 "Tue Mar 7" 开头。

    要允许过滤字符串格式的日期,您必须确保日期格式的字典(字母)顺序与时间顺序相同。一个很好的字符串格式是 ISO-8601,它可以像你拥有的 start_date 一样:"2020-03-06T00:00:00-04:00"

    然后您可以使用以下方式查询 3 月 6 日至 7 日:

    ref.orderByChild("timestamp/start_time").startAt("2020-03-06").endAt("2020-03-07~")...
    

    另见:

    【讨论】:

    • 非常感谢您的洞察力和资源!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多