2017-10-20 58 views
0

所有的孩子一样,增加值数据库火力点后:如何获得在火力

writeNewUser("0",name , "0", "1"); 
writeNewUser("1",name , "0", "2"); 
writeNewUser("2",name , "0", "3"); 
writeNewUser("3",name , "0", "4"); 

private void writeNewUser(String GameID, String name, String wpm , String userID) { 
     User user = new User(name, wpm , userID); 

     mDatabase.child("games").child(GameID).setValue(user); 
    } 

    @IgnoreExtraProperties 
    public class User { 

     public String name; 
     public String wpm; 
     public String userID; 

     public User() { 
      // Default constructor required for calls to DataSnapshot.getValue(User.class) 
     } 

     public User(String name, String wpm , String userID) { 
      this.name = name; 
      this.wpm = wpm; 
      this.userID = userID; 
     } 

    } 

而且例如它看起来像在火力点: 游戏> 0>名称:,WPM:,ID : 游戏> 1>名称:,WPM:,ID:

我想收到的是从数据库中的游戏ID的由低到高

我很高兴能得到一些帮助,因为我整理对这个数据库不熟悉,并且一直在寻找几个小时伊迪。

+0

你可以发布你的数据获取代码吗? –

+0

@MohammadAldefrawy我正在尝试使用getChildren(),但我无法理解这是如何工作的,以及我应该使用哪个var – user124532053452

+0

你刚刚想要一次数据,还是希望实时更新数据库,即更新每次“游戏”数据库被修改? –

回答

1

下面是根据密钥(GameID)排列的数据库中所有游戏的代码,假设您不需要实时更新。

final HashMap<Long,User> userMap = new HashMap<>(); 
    FirebaseDatabase.getInstance().getReference("games").orderByKey().addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren(); 

      for (DataSnapshot aSnapshotIterable : snapshotIterable) { 
       userMap.put(Long.parseLong(aSnapshotIterable.getKey()),aSnapshotIterable.getValue(User.class)); 
      } 
      Set<Long> gameIds = userMap.keySet(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

谢谢,我可以在哪里阅读有关实时更新并查看它们之间的区别? – user124532053452

+0

您可以在这里阅读有关的差异.https://firebase.google.com/docs/database/android/read-and-write#listen_for_value_events –

+0

如果这就是您的意思,您将无法获得确切的更改“区别”。如果能够帮助我更好地理解用例,我将能够更好地为您提供帮助。 –