我试图在android中实现Firebase,我在其中有几个问题,如果你能帮助我进入这一点,我会很高兴。有点迷惑了。所以这是我的问题。
我在listview中显示Firebase聊天,在该用户执行pull-to-refresh之后,我只想从firebase加载前100条消息,然后加载前200条消息,依此类推。

为此,我在limitToFirst()和limitToLast()中寻找,不知道哪一个更好。
有谁能帮帮忙。
发布于 2017-02-10 21:18:52
我几乎用这种方式做了同样的事情:
在您的类中(我假设这是一个活动),创建一个Query类型的成员变量:
private Query queryChat;在onStart方法中,开始执行查询:
@Override
public void onStart() {
super.onStart();
// initialize your value event listener
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}pageSize是一个int变量,这里必须设置为100。
这样做,您首先对消息进行升序(因此,结果排序列表中的第一个消息是最旧的),然后选择最后的pageSize消息(因此,pageSize在时间顺序上是最后一个)。因此,您将获得第一条(按照时间顺序,从最新开始) pageSize消息。
我假设您已经在这里实现了一个ValueEventListener。此外,timestamp是firebase消息中的一个字段,您可以在其中存储以毫秒为单位的消息的时间戳。
现在,在类中定义一个方法,如下所示:
private void loadMoreItems() {
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.endAt(messageList.get(messageList.size()-1).getTimestamp())
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}这里的messageList是一个存储聊天消息的ArrayList,当您从firebase获取消息时,它将填充在ValueEventListener中。
在这里,我告诉firebase做升序(和以前一样),但只选择那些时间戳为<=的项目,最后一项对用户可见。(.endAt(messageList.get(messageList.size()-1).getTimestamp())告诉firebase就是这样),最后像以前一样选择limitToLast。
现在,您可以随时调用此方法(loadMoreItems) (在您的示例中,当用户执行pull to refresh时)。
发布于 2017-02-17 19:10:13
您可以尝试这样做:
int mPageEndOffset = 0;
int mPageLimit = 10;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
connectDetector = new ConnectDetector(getActivity());
if(connectDetector.getConnection()) {
alanRef = new Firebase(firebaseURL).child(EventChatActivity.SuperCateName + "/ " + eventDetail.getCategory_name() + "/ " + eventDetail.getEvent_title() + "/ " + EventChatActivity.eventID).child("StadiumChat");
alanQuery = alanRef.limitToFirst(mPageLimit);
userName = MyApp.preferences.getString(MyApp.USER_NAME, null);
EventChatActivity.eventID).child("StadiumChat");
}
} 这将从firebase获取最近10条消息的记录。
https://stackoverflow.com/questions/42159878
复制相似问题