为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2021-09-29 15:32:11
我正在使用 firebase 实时数据库来存储和检索数据,但由于某种原因,我无法实现我想要的。我想在刷卡刷新布局上一次获得 20 条记录。我的数据看起来像: 最初,我加载 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 个。我正在尝试做这样的事情。但它似乎没有回来。@Overridepublic 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() 组合,但似乎没有任何效果。
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

尝试这个:


 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);

    }

在我的情况下它工作得很好。祝你好运


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 252 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信