Java 使用Firebase数据库分页不起作用
我对firebase分页有问题 我有表柱,这是一个示例结构: 我每次只想得到10篇文章,这是我的代码页是0:Java 使用Firebase数据库分页不起作用,java,android,firebase,firebase-realtime-database,pagination,Java,Android,Firebase,Firebase Realtime Database,Pagination,我对firebase分页有问题 我有表柱,这是一个示例结构: 我每次只想得到10篇文章,这是我的代码页是0: @NonNull @CheckResult public Single<DataSnapshot> getData(@NonNull DatabaseReference ref, int page) { return Single.create(emitter -> { ref.orderByChild("t
@NonNull
@CheckResult
public Single<DataSnapshot> getData(@NonNull DatabaseReference ref, int page) {
return Single.create(emitter -> {
ref.orderByChild("timestamp")
.startAt(page * 10)
.limitToFirst(10);
final ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!emitter.isDisposed()) {
emitter.onSuccess(dataSnapshot);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
if (!emitter.isDisposed()) {
emitter.onError(databaseError.toException());
}
}
};
ref.addListenerForSingleValueEvent(listener);
});
}
@NonNull
@检查结果
公共单getData(@NonNull DatabaseReference,int page){
返回单个。创建(发射器->{
参考orderByChild(“时间戳”)
.startAt(第10页)
.limitToFirst(10);
最终值EventListener listener=新值EventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
如果(!emitter.isDisposed()){
发射器.onSuccess(dataSnapshot);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
如果(!emitter.isDisposed()){
onError(databaseError.toException());
}
}
};
参考addListenerForSingleValueEvent(侦听器);
});
}
结果如下
为什么列表大小等于20而不是10?p、 s.limit to first或limit to last这与调用startAt()
、limitToFirst()
和DatabaseReference
上的类似方法返回一个新的Query
对象的结果没有区别。您需要保留对该查询的引用,并将侦听器附加到该查询:
Query query = ref.orderByChild("timestamp")
.startAt(page * 10)
.limitToFirst(10);
query.addListenerForSingleValueEvent(listener);
可能是因为有两个用户。此外,您将用户数限制为10,而不是每个用户的帖子数