2017-02-14 61 views
4

我正在構建像Instagram一樣的社交網絡。我以前在許多社交網絡上工作過,使用mySQL。我是Firebase服務器的新手。社交網絡 - 遵循使用Firebase數據庫的功能

我想通過名稱搜索用戶,並希望在列表視圖中顯示關注/關注按鈕。但我有點困惑以標準格式運行android firebase查詢。我不想運行不必要的循環。以下是我的關於下表的數據庫結構。

節點名稱爲follow,follower_id是指跟隨用戶的用戶,被跟蹤的用戶稱爲followed_id

如何編寫採用了android火力顯示所有與啓動名用戶(例如「一個」),一個簡單的查詢,並與我已經關注他/她與否的狀態。

僅供參考:我沒有使用firebase rest API。

+0

你在哪裏存儲跟隨'followedId'的用戶的名字? –

+0

我們有一個單獨的用戶表,我們存儲所有用戶的詳細信息。 –

+0

它是如何與節點'follow'連接的? –

回答

0

如何使用android firebase編寫一個簡單的查詢,以顯示所有用戶的姓名開頭(例如「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); 

我知道這是不是非常簡單,看起來disapponting。它可能也很慢,但值得嘗試。

或者,您應該考慮以簡化Firebase查詢的方式構建數據庫。 有關firebase查詢的更多信息,例如herehere