如何在另一个查询中使用Firebase(for Android)查询结果?

时间:2016-12-21 21:39:14

标签: android firebase firebase-realtime-database

我到处寻找一种以优雅的方式实现这一目标的方法,遗憾的是无济于事。这是我的简化数据库结构的样子:

{
  "bets" : {
    "bet1" : {
      "description" : "this is so cool",
      "initiator" : "user1",
      "public" : false,
      "receivers" : {
        "user2" : true,
        "user3" : true
      },
      "timestamp" : "1480868494",
      "title" : "Cool Bet"
    }
  },
  "users" : {
    "user1" : {
      "bets_initiated" : {
        "bet1" : true
      },
      "email" : "some_mail@gmail.com",
      "friends" : {
        "user2" : true,
        "user3" : true
      },
      "score" : 0
    },
    "user2" : {
      "bets_initiated" : {
        "bet2" : true
      },
      "email" : "some_mail@gmail.com",
      "friends" : {
        "user1" : true,
        "user3" : true
      },
      "score" : 0
    },
    "user3" : {
      "bets_initiated" : {
        "bet3" : true
      },
      "email" : "some_mail@gmail.com",
      "friends" : {
        "user2" : true,
        "user1" : true
      },
      "score" : 0
    }
  }
}

这是相关的Java代码:

// get friends as a list
mDatabase.child("users").child(mCurrentUserId).child("friends").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.getValue() != null) {
            HashMap<String, Boolean> friendsMap = dataSnapshot.getValue(HashMap.class);
            List friendsList = new ArrayList<>(friendsMap.keySet());
             String friendsListAsString = TextUtils.join(", ", friendsList);

            // build query using list of friends
            Query friendsQuery = mDatabase.child("users").equalTo(friendsListAsString);

            /**
             * A {@link com.firebase.ui.database.FirebaseRecyclerAdapter} providing the interactive list of friends
             */
            mFriendsListAdapter = new UserAdapter(User.class, R.layout.user_item,
                    UserAdapter.UserViewHolder.class, friendsQuery);

            // bind click listener through helper function
            mFriendsListAdapter.setOnUserClickListener(mContext);
            mFriendsListView.setAdapter(mFriendsListAdapter);

        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
    }
});

所以,我基本上试图获取所有用户ID,在查询中使用它们来获取相应用户节点的所有数据(通过将其映射到模型Java类)并将其提供给适配器(I&# 39; m使用FirebaseRecyclerAdapter)。

它似乎以某种方式起作用,但我很确定这不是应该如何完成的。

我知道我可以重新构建我的数据库,这样就不会只将布尔值映射到朋友的下面的UID了。节点我将克隆相应用户的整个用户节点。

但是,在文档中,建议使用Firebase数据库的这种平面方法,因此我认为必须有一种方法可以有效地执行此操作。由于我对使用Firebase进行开发非常陌生,我可能只是没有掌握明显的解决方案,但我真的被困在这里,所以任何帮助都会受到赞赏。

0 个答案:

没有答案