firebase表列出所有用户

时间:2018-06-03 16:28:47

标签: android firebase data-structures firebase-realtime-database

数据库的结构如何像游戏一样?用户可以玩的地方,我存储积分时间等,并且有不同的级别,然后我想用难度查询用户,我猜是

users
   -- id
      --- name
      --- ....
   -- id
      --- name
      --- ....

然后是难度表

diff
  -- id
    -- 2
  -- id
    -- 3

然后我想像一个表来存储像用户级别和积分一样的排名,数据库结构怎么样?

2 个答案:

答案 0 :(得分:0)

用于排名的Firebase数据结构将如下所示:

Ranking
  -- level 1
       -- 1  // top list for level 1
           -- name -> username1 (value)// user details, point and name, can be store more details.
           -- point -> 300
       -- 2        
           -- name -> username2
           -- point -> 260
       ......

  -- level 2
       -- 1 // 1st user
           -- name -> username1
           -- point -> 280
       -- 2 // 2nd user   
           -- name -> username2    
           -- point -> 240
       ......

  -- level 3
       -- 1
           -- name -> username1  
           -- point -> 230
       -- 2        
           -- name -> username2   
           -- point -> 200
       ......

答案 1 :(得分:0)

如果对象USER具有正确的属性,则不需要仅用于商店排名的表。例如:

<强>类

public class UserData {
    //------PROPERTIES-------
    private String id;
    private String nickname;
    private int points;
    private int level;
    private String email;
}
...

<强>活性

private final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
private final DatabaseReference userReference = databaseReference.child("Users");

/** --SAVING USER--
* * THIS METHOD INSERT OBJECT USER IN DATABASE
* **/
private void insertNewUser(String id, String nickname, String email, int points, int level)
{
try {
    UserData userdata = new UserData(id, name, nickname, email, points);
    userReference.child(id).setValue(userdata);
    }catch (Exception e)
    {
         e.printStackTrace();
    }
}

这在firestore中更好,你可以在需要的时候改变这个结构......不需要开始你所有的结构完成项目。 然后,对于节目排名,您只需要 OrderBy

rankingRef.orderBy("level").orderBy("points");

/**
* RETRIEVE DATA
* */
    public void loadUsers(final int level)
    {
        final List<UserData> userList = new ArrayList<UserData>();
        if(userList.size() > 0)
        {
            userList.clear();
        }

        //--INITIALIZE--
        userListRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterable<DataSnapshot> children = dataSnapshot.getChildren();

                for(DataSnapshot child: children)
                {
                        UserData user = child.getValue(UserData.class);
                        userList.add(user);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
相关问题