You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发场景下无法从Firebase获取最近30天帖子数据求助

问题原因

  • 构造的orderByChild("timestamp")查询未绑定事件监听器,查询从未实际执行
  • 时间对比逻辑错误:将时间对象转字符串后再转整型的操作无法得到正确的时间戳数值,也没有和Firebase中存储的时间戳单位对齐
  • 全量拉取数据后在客户端筛选的逻辑效率极低,数据量较大时会浪费带宽和设备性能

修复方案

直接使用Firebase查询的startAt方法在服务端完成筛选,无需拉取全量数据再本地判断,修正后的代码如下:

// 计算30天前的时间戳,注意和Firebase中存储的timestamp单位对齐
// 若Firebase存的是秒级时间戳,可改为minusSeconds(30L * 24 * 60 * 60).toEpochSecond()
val thirtyDaysAgoTimestamp = Instant.now().minusMillis(30L * 24 * 60 * 60 * 1000).toEpochMilli()

val database: DatabaseReference = Firebase.database.reference
// 构造查询:按timestamp排序,只返回大于等于30天前时间戳的数据
val postQuery = database.orderByChild("timestamp").startAt(thirtyDaysAgoTimestamp)

val postListener = object : ValueEventListener {
    @RequiresApi(Build.VERSION_CODES.O)
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        postsList.clear()
        for (postSnapshot in dataSnapshot.children) {
            val post = postSnapshot.getValue(PostsModel::class.java)
            post?.let {
                postsList.add(it)
            }
        }
        // 此处可添加列表更新后的UI刷新逻辑
    }

    override fun onCancelled(databaseError: DatabaseError) {
        Timber.d("拉取数据失败: ${databaseError.message}")
    }
}

// 给查询绑定监听器,触发查询执行
postQuery.addValueEventListener(postListener)

Firebase数据结构

Firebase数据结构

内容的提问来源于stack exchange,提问作者Ishan Khandelwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:54:08