我正在建立像Instagram这样的社交网络。我以前使用mySQL在许多社交网络上工作过。我是firebase服务器的新手。
我想通过名称搜索用户,并希望在列表视图中显示关注/关注按钮。但我很困惑以标准格式运行android firebase查询。我不想运行不必要的循环。下面是我的数据库结构。
节点名称为follow
,follower_id
表示关注用户的用户和被关注的用户称为followed_id
。
如何使用android firebase编写一个简单的查询,以显示名称为start的所有用户(例如" an"),并且状态为我已经跟随他/她。
仅供参考:我没有使用firebase rest API。
答案 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查询的详情,请参阅here和here。