首页 > 解决方案 > Android 按日期键订购 Firebase 项目

问题描述

我的firebase中有一个孩子的列表,关键名称是日期现在我想以某种方式订购这些项目,以便我可以首先确定最新的日期项目,而且我正在使用自定义采用者来使用 FirebaseRecyclerAdapter 显示这些数据,我还需要当我单击项目时获取子键:这是我的孩子看起来像在这里查看

这是我显示数据的代码

  DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("winners");
        Query personsQuery = personsRef.orderByKey();

        mPeopleRV.hasFixedSize();


        LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
        mLayoutManager.setReverseLayout(true);
        mLayoutManager.setStackFromEnd(true);

        mPeopleRV.setLayoutManager(mLayoutManager);

        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {


                holder.setTitle(capitalize(model.getName()));
                holder.setDesc(model.getDate().replace('-', ' '));
                holder.setAmount(model.getAmount());
                holder.setImage(getBaseContext(), model.getImg());


                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                       //Here i need child key when click on item (Date)


                    }
                });
            }

            @Override
            public Notification.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.news_row, parent, false);

                return new Notification.NewsViewHolder(view);
            }
        };

        mPeopleRV.setAdapter(mPeopleRVAdapter);

我需要的东西:

  1. 按日期订购商品(本示例中第一个位置的最晚日期
    为 2018 年 9 月 2 日)

  2. 用户单击项目时获取密钥(密钥即日期)

标签: javaandroidfirebasefirebase-realtime-database

解决方案


除非您对数据库架构进行一些更改,否则无法按日期对项目进行排序。即使您的键拥有一些“日期”之王(2018 年 9 月 2 日),也无法按日期对它们进行排序,因为所有 Firebase 键都是字符串,并且在对字符串进行排序时,按字典顺序排序。

为了解决这个问题,您应该timestamp为每个对象添加一个新属性,如此处所述。假设这些对象在一个名为 的节点中dates,那么只需使用如下查询:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("dates").orderByChild("timestamp");
query.addListenerForSingleValueEvent(/* ... */);

推荐阅读