java - 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);
我需要的东西:
按日期订购商品(本示例中第一个位置的最晚日期
为 2018 年 9 月 2 日)用户单击项目时获取密钥(密钥即日期)
解决方案
除非您对数据库架构进行一些更改,否则无法按日期对项目进行排序。即使您的键拥有一些“日期”之王(2018 年 9 月 2 日),也无法按日期对它们进行排序,因为所有 Firebase 键都是字符串,并且在对字符串进行排序时,按字典顺序排序。
为了解决这个问题,您应该timestamp
为每个对象添加一个新属性,如此处所述。假设这些对象在一个名为 的节点中dates
,那么只需使用如下查询:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("dates").orderByChild("timestamp");
query.addListenerForSingleValueEvent(/* ... */);
推荐阅读
- node.js - 查询 model.findOne 后无法呈现页面
- python - 根据条件从数据框中删除行
- java - 对于 CsvMapper 类型,方法 readerFor(Class) 未定义
- python - 是否有任何 python 模块可以在各自的 unicode 版本中转换字母?
- python - Networkx:将所有节点最短路径长度的总和作为一个聚合值
- kotlin - 这个奇怪的运行时异常不断出现
- sql-server - SQL查询全部存在
- java - 通过paintComponent和缓冲图像在JPanel上绘图的区别
- c# - 为什么我的 DLL 被覆盖了,我能做些什么来阻止它?
- mongodb - mongoDB - 我如何使用投影并使用其值排除特定字段?