社交网络 - 使用firebase数据库跟踪功能

时间:2017-02-14 07:44:31

标签: android firebase firebase-realtime-database

我正在建立像Instagram这样的社交网络。我以前使用mySQL在许多社交网络上工作过。我是firebase服务器的新手。

我想通过名称搜索用户,并希望在列表视图中显示关注/关注按钮。但我很困惑以标准格式运行android firebase查询。我不想运行不必要的循环。下面是我的数据库结构。

节点名称为followfollower_id表示关注用户的用户和被关注的用户称为followed_id

如何使用android firebase编写一个简单的查询,以显示名称为start的所有用户(例如" an"),并且状态为我已经跟随他/她。

仅供参考:我没有使用firebase rest API。

1 个答案:

答案 0 :(得分:0)

  

如何使用android firebase编写一个简单的查询,以显示名称为start的所有用户(例如" an"),并且状态为我已经跟随他/她。

我认为你不能在一次查询中做到这一点。

您可以尝试使用嵌套查询来执行此操作,如下所示:

ChildEventListener childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        // Retrieve the userId
        User user = dataSnapshot.getValue(User.class);

        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot usersFollowedDataSnapshot) {
                for ( DataSnapshot userFollowedDataSnapshot : usersFollowedDataSnapshot.getChildren() ) {

                    // Retrieve the follower structure
                    Follow follow = userFollowedDataSnapshot.getValue(Follow.class);

                    if ( myUserId == follow.getFollowerId() ) {
                        // This is a user that I'm following and which name starts with "am"
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };

        Query secondQuery = mFirebaseDatabaseReference.child("follow").orderByChild("followedId").equalTo(user.getId());
        secondQuery.addListenerForSingleValueEvent(valueEventListener);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
};


Query firstQuery = mFirebaseDatabaseReference.child("users").orderByChild("name").startAt("am").endAt("am\uf8ff");
firstQuery.addChildEventListener(childEventListener);

我知道这不是很直白,看起来很令人失望。它也可能很慢,但值得尝试。

或者,您应该考虑以简化firebase查询的方式构建数据库。 有关firebase查询的详情,请参阅herehere