根据 Firebase 的最新日期将数据排序到 RecyclerView
Posted
技术标签:
【中文标题】根据 Firebase 的最新日期将数据排序到 RecyclerView【英文标题】:Sort data to RecyclerView based on latest date from Firebase 【发布时间】:2021-12-15 11:42:25 【问题描述】:我正在开发一个 android 聊天应用程序,我需要在其中按日期订购对话详细信息。下面提到了我的 firebase 数据结构。
现在我想根据时间戳从 Firebase 实时数据库中检索并显示我的 RecyclerView 上最新日期的数据。
我尝试了以下方法。
final DatabaseReference nm =
FirebaseDatabase.getInstance().getReference("Transaction");
Query query = nm.orderByChild("Date").limitToFirst(5);
;
query.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
listData.clear();
if (dataSnapshot.exists())
for (DataSnapshot npsnapshot : dataSnapshot.getChildren())
Transaction ld = npsnapshot.getValue(Transaction.class);
listData.add(ld);
Tadapter = new TransactionAdapter(listData);
rv.setAdapter(Tadapter);
Log.d(TAG, "Total Count" + Tadapter.getItemCount());
【问题讨论】:
【参考方案1】:我正在开发一个 Android 聊天应用程序,我需要在其中按日期订购对话详细信息。
正如我在您的屏幕截图中看到的,您的 Date
属性是字符串类型。这意味着您不能调用:
.orderByChild("Date")
并期望表现得像时间戳一样。当您订购 String 元素时,您得到的顺序始终是 lexicographically。这意味着字符串在排序时不考虑任何类型的数值,尤其是在涉及日期时,即使日期包含数字,就像您的第一个元素一样:
Date: "30/7/2021"
因此,在查询数据库时使用字符串值不是一种选择。但是,我看到您已经拥有 Timestamp
属性。也许在那个属性上,它应该进行排序。如果不是这种情况,我建议您将 Date
属性的类型从 String 更改为 Timestamp,正如我在以下帖子中的回答中所述:
现在我想在我的 RecyclerView 上检索并显示最新日期的数据
这意味着您很可能需要颠倒顺序,这意味着您的所有交易都必须以降序显示在您的 RecyclerView 中。在这种情况下,您可以在服务器上或客户端上使用一些选项。
假设您已将 Date
属性的类型从 String 更改为 Timestamp,那么您可以简单地考虑存储倒置的 Timestamp 值,如下所示:
Firebase-root
|
--- transactions
|
--- 1
|
--- Date: 1627714194
|
--- invertedDate: -1627714194
看,invertedDate
属性是负值。由于默认情况下,元素是按升序排列的,为了能够对事务进行降序排列,您应该简单地使用:
Query query = nm.orderByChild("invertedDate").limitToFirst(5);
另一方面,可以通过一些变通方法在客户端上实现相同的功能,正如我在以下帖子中的回答中所解释的那样:
How to arrange firebase database data in ascending or descending order?【讨论】:
如果您认为我的回答对未来的 Firebase 开发人员也有帮助,也请考虑 giving a vote-up (▲)。我真的很感激。谢谢!【参考方案2】:Query query = nm.orderByChild("Date").limitToFirst(5);
Firebase 实时数据库按升序排序,这意味着您将收到的 5 个节点将是最旧的。
我想检索并显示最近日期的数据
尝试改用limitToLast
,这将在按日期字段排序节点后返回最后5个文档,即5个最新节点。
Query query = nm.orderByChild("Date").limitToLast(5);
您可以在sorting and filtering data 阅读更多相关信息。
【讨论】:
以上是关于根据 Firebase 的最新日期将数据排序到 RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章
如何将Firebase Recycler视图从最新(列表顶部)排序到最旧[重复]