【问题标题】:Access First Firebase Node Data in Firebase Query在 Firebase 查询中访问第一个 Firebase 节点数据
【发布时间】:2016-07-03 04:22:54
【问题描述】:

我有一个返回 100 个子节点的 Firebase 数据库查询。然后我将节点放入 FirebaseRecyclerAdapter,以便数据显示在回收站视图中。这一切都很好。现在我需要访问最新的元素和它的 Firebase 键,但一直无法弄清楚(应该很容易,我一定错过了一些明显的东西)。如何在返回的查询或适配器中获取最新元素及其 Firebase 键?

为了获得 100 个子节点,我使用:

Query publishedPostsQuery = mFirebaseDatabase.child("posts").limitToFirst(100);

然后我填充一个 Firebase 回收器适配器:

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.post_items, PostViewHolder.class, postsQuery) { ... };

然后在回收器视图中使用此适配器。

如何通过 Query 或 FirebaseRecyclerAdapter 获取第一个 Post 对象及其 Firebase 键?

我的 firebase 数据库结构如下:

-posts
  -KLRDgtNht0iSB6RUGGz
    - author: "author 1"
    - title: "some post"
    - detail: "blah blah"
  -HGze53Sd4RRpFikdIKD
    - author: "author 2"
    - title: "great post"
    - detail: "blah blah blah blah"

我使用的 Firebase 版本是:

compile 'com.firebaseui:firebase-ui-database:0.4.0'
compile 'com.google.firebase:firebase-database:9.0.2'

【问题讨论】:

  • 你想要:-作者:“作者 1”-标题:“一些帖子”-详细信息:“等等等等”??
  • 实际上我想要最下面的“作者 2”——这是最新的帖子,我想要那个。我将更新我的问题以澄清。

标签: android firebase android-recyclerview firebase-realtime-database


【解决方案1】:

我想通了。为了找到一个特定的节点,在我的情况下,最新的帖子(根据我的问题中显示的给定数据结构显示为 Post 对象),我必须使用addListenerForSingleValueEvent 来获取 Firebase DataSnapshot,然后我可以从那里循环子节点来找到我想要的。

    Query publishedPostsQuery = mFirebaseDatabase.child("posts")
            .limitToFirst(100);

    publishedPostsQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.getChildrenCount() != 0) {
                Iterable<DataSnapshot> i = dataSnapshot.getChildren();
                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                  // Find the particular node (e.g. last node, first node... etc) here and create a object from it.
                  MyPost foundPost = postSnapshot.getValue(MyPost.class);
                  ...
                  ...
                }
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

    // Assign the query to FirebaseRecyclerAdapter here.

【讨论】:

    【解决方案2】:

    使用适配器,你可以这样做:

    if (mAdapter.getItemCount() > 0) {
        final Post = mAdapter.getItem(0);
    }
    

    你可以在这里找到FirebaseRecyclerAdapter的来源:https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 2017-10-17
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多