如何使用时间戳获取范围内的数据 - Firebase、Android、实时数据库

我正在使用 firebase 实时数据库来存储和检索数据,但由于某种原因,我无法实现我想要的。

我想在刷卡刷新布局上一次获得 20 条记录。

我的数据看起来像: 

http://img.mukewang.com/6154169700019c6204720273.jpg

最初,我加载 50 条记录:


chat.limitToLast(default_num_of_messages).addChildEventListener(new ChildEventListener() {

            @Override

            public void onChildAdded(DataSnapshot dataSnapshot, String s) {


                Map map = dataSnapshot.getValue(Map.class);

                String user_id =  map.get("user_id").toString();

                String message = map.get("message").toString();

                String timestamp = map.get("timestamp").toString();


                Log.d("MAP", map.toString());

                ChatMessage chat_message = new ChatMessage();

                chat_message.setUser_id(user_id);

                chat_message.setMessage(message);

                chat_message.setTimestamp(Long.parseLong(timestamp));

                Log.d("CHAT MSG", chat_message.toString());


                if(Integer.parseInt(user_id) == Utils.getInstance().getLoggedInUser().getId()) {

                    addMessageBox(chat_message, 1);

                }

                else{

                    addMessageBox(chat_message, 2);

                }

            }

在刷新这些之后,我想再加载 20 个。我正在尝试做这样的事情。但它似乎没有回来。


@Override

public void onRefresh() {

    if(refresh_toggle) {

        swipe_view.setRefreshing(true);

        Log.d("CHAT", "REFRESHED!!!");

        //reload new data

        chat.orderByChild("timestamp").endAt(10).addChildEventListener(new ChildEventListener() {

            @Override

            public void onChildAdded(DataSnapshot dataSnapshot, String s) {


                Map map = dataSnapshot.getValue(Map.class);

                String user_id =  map.get("user_id").toString();

                String message = map.get("message").toString();

                String timestamp = map.get("timestamp").toString();

        });

    }

}

如您所见,我正在尝试 orderByChild“时间戳”,然后尝试不同的 startAt()、endAt() 组合,但似乎没有任何效果。


慕码人2483693
浏览 253回答 1
1回答

慕田峪9158850

尝试这个: int number_item_load = 10; //changed number if you want    public void loadMore(int offset, String theLastValue) {        // theLastValue: depend on your orderByChild() 's value        mDatabase = FirebaseDatabase.getInstance().getReference().child(Utils.FB_ROOT);        mEventListener = new ChildEventListener() {            @Override            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {                if (isAlreadyAttach()) {                    // Get your item and callback to view and insert to listView                }            } ...        };        mDatabase.orderByChild("yourvalue").startAt(theLastValue).limitToFirst(number_item_load ).addListenerForSingleValueEvent(new ValueEventListener() {            @Override            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {                // TODO Finished loaded number_item_load  item                OnLoadedFinish(); //                 mDatabase.removeEventListener(mEventListener); // Remove listener after load            }            @Override            public void onCancelled(@NonNull DatabaseError databaseError) {            }        });        mDatabase.orderByChild("yourvalue").startAt(theLastValue).limitToFirst(number_item_load ).addChildEventListener(mEventListener);    }在我的情况下它工作得很好。祝你好运
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java