Android Firebase数据库查询就像twitter上的热门推文

Android Firebase数据库查询就像twitter上的热门推文,android,firebase,twitter,firebase-realtime-database,Android,Firebase,Twitter,Firebase Realtime Database,我在firebase数据库上使用google github。有人评论,如果用户喜欢别人的评论,他们可以给一个明星(喜欢)。另一方面,我想做一个页面,它只显示顶部的评论,这是上升。如果我使用此查询: 下面给出了示例代码-: package com.google.firebase.quickstart.database.fragment; import com.google.firebase.database.DatabaseReference; import com.google.firebas

我在firebase数据库上使用google github。有人评论,如果用户喜欢别人的评论,他们可以给一个明星(喜欢)。另一方面,我想做一个页面,它只显示顶部的评论,这是上升。如果我使用此查询:

下面给出了示例代码-:

package com.google.firebase.quickstart.database.fragment;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.Query;

    public class MyTopPostsFragment extends PostListFragment {

        public MyTopPostsFragment() {}

        @Override
        public Query getQuery(DatabaseReference databaseReference) {
            // [START my_top_posts_query]
            // My top posts by number of stars
            String myUserId = getUid();
            Query myTopPostsQuery = databaseReference.child("user-posts").child(myUserId)
                    .orderByChild("starCount");
            // [END my_top_posts_query]

            return myTopPostsQuery;
        }
    }

它将在任何时候返回顶级评论。如何指定例如每周或每天的热门评论。此外,我的datasnapshoot中有一个时间戳,Firebase实时数据库不支持链式查询。这样的查询:

databaseReference.child("user-posts")
    .child(myUserId)
    .orderByChild("starCount")
    .orderByChild("timestamp");
starCount_timestamp
这是禁止的。在同一查询中多次调用order by方法会引发错误。一次只能使用一个order by方法

要解决这个问题,您可以创建一个额外的关键点,使之成为可能。“post”可以有一个组合键,用于
starCount
timestamp
。您的新密钥应如下所示:

databaseReference.child("user-posts")
    .child(myUserId)
    .orderByChild("starCount")
    .orderByChild("timestamp");
starCount_timestamp

然后,您可以根据这个新键查询数据库。

它的工作非常完善,例如,如果starCounts相同,它将使用时间戳进行排序