我有以下代码:
DatabaseReference ref = lib.getFirebaseDatabase().getReference("data/newquestions");
Query q = ref.orderByChild("date/timeUTC");
long t = dtStart.getTimeUTC();
q.startAt(t);
q.addListenerForSingleValueEvent(new ValueEventListener() {
这是样本数据:
{
"date" : {
"time" : 1632050827132,
"timeUTC" : 1632043627132,
"timezone" : "Europe/Berlin"
},
"enddate" : {
"time" : 1632137227132,
"timeUTC" : 1632130027132,
"timezone" : "Europe/Berlin"
},
"enumcontacttypes" : [ "Public" ],
"id" : 117,
"public" : true,
"userid" : 8
}
我总是得到相同数量的值,与我指定的日期无关。startAt()
函数无效
因为我看不到更详细的数据库模式,所以我不能说预期的查询是否会像预期的那样工作。我能说的是,Firebase实时数据库查询是不可变的。这意味着您不能更改现有查询的属性。如果通过调用.startAt(t)
方法更改该值,那么它将变成一个新的查询。因此,最简单的解决方案是将所有方法调用链接到单个Query对象中,如下所示:
DatabaseReference ref = lib.getFirebaseDatabase().getReference("data/newquestions");
long t = dtStart.getTimeUTC();
Query q = ref.orderByChild("date/timeUTC").startAt(t); //Added to the initial query
q.addListenerForSingleValueEvent(/* ... /*);