android - Firebase 查询中带有 limitToLast() 的 endAt() 在 android 中无法按预期工作
问题描述
我正在使用 firebase 实时数据库来存储聊天消息架构如下所示
"chat_message" : {
"up-29709425-fef2-490c-8335-77dbeafbce1e" : {
"-MLhPH_i7bfvnTpccK1k" : {
"chat_room_id" : "up-29709425-fef2-490c-8335-77dbeafbce1e",
"created_at" : "2020-11-09T19:59:11+05:30",
"creator_id" : 15456623,
"message" : "hii",
"message_type" : "text",
"time_in_ms" : 1604932151865
}
},
"up-299bcd2f-90bb-4ca2-b526-7e858d2d98fe" : {
"-MLhWydTKmB52W_XFtS6" : {
"chat_room_id" : "up-299bcd2f-90bb-4ca2-b526-7e858d2d98fe",
"created_at" : "2020-11-09T20:32:47+05:30",
"creator_id" : 15451746,
"message" : "hoi",
"message_type" : "text",
"time_in_ms" : 1604934167159
}
}
问题是第一次,我得到 10 个项目,之后,我无法得到接下来的 10 个项目。这是我正在使用的查询
private var query: Query? = null
private fun getInitialChatMessages(time: String?, key: String?) {
query = if (time == null) {
// For first time I am getting last 10 items
getFirebaseDbReference()
.child(FIREBASE_DATABASE_LOCATION_MESSAGES)
.child(project?.userProjectId!!)
.orderByChild("time_in_ms")
.limitToLast(INITIAL_FETCH_MESSAGE_COUNT)
} else {
// on scroll its not working
getFirebaseDbReference()
.child(FIREBASE_DATABASE_LOCATION_MESSAGES)
.child(project?.userProjectId!!)
.orderByChild("time_in_ms")
.endAt("$time")
.limitToLast(INITIAL_FETCH_MESSAGE_COUNT)
}
query?.addListenerForSingleValueEvent(listener)
}
任何帮助,将不胜感激。提前致谢。
解决方案
数据库中的time
属性是一个数值,但在您的代码中,您将其作为字符串传递。当数据库比较一个数字和一个字符串时,它们永远不会相同。
因此,您需要修复您的代码,以便将时间视为一个数字,或者至少通过调用toDouble()
它作为一个数字传递给数据库。
推荐阅读
- python - 在 seaborn 散点图中指定颜色
- python - 循环和while循环函数的“TypeError:期望一个字符缓冲区对象”
- python - “Python”实现假设检验
- javascript - 如何在 reactJS 状态下动态设置对象属性的值?
- java - 使用 getBean 在 Spring 中获取 bean
- javascript - 为什么执行 ('Hello','world!) 返回 'world!'?
- meteor - 在准备工作期间解析Passengerfile.json 设置时出错
- numpy - 如何在张量流中获取查找表的地图
- c# - 尝试在构造函数中传递接口时,我的泛型类中的错误
- python - 熊猫数据帧时间格式值的总和