2017-01-09 112 views
3

我想增加每月的记分牌,但对我来说似乎有点困难。我不知道如何对某个列表或数组采取特定的值。像日期一样,只能使用09.01.2017值。如果我能做到这一点,那么我认为我可以按价值分类。Firebase根据日期排序积分

enter image description here

 FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    final DatabaseReference highscoreRef = database.getReference(); 




    // Ordering with score and adding key values as string to nameList and scoreList 
    highscoreRef.orderByChild("score").limitToLast(10).addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { 
      try { 

       nameList.push(snapshot.child("name").getValue().toString()); 
       scoreList.push(snapshot.child("score").getValue().toString()); 

      } catch (Exception e) { 
       //Toast.makeText(getApplicationContext(), "Error fetching data.", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     @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) { 
      Toast.makeText(getApplicationContext(), "Error sending data.", Toast.LENGTH_LONG).show(); 
     } 

    }); 

回答

5

如果你要查询的日期范围,你应该把它们存储在允许范围查询的格式。日期可以是timestamp或按字典顺序排序的字符串。

您当前将日期存储为dd.MM.yyyy字符串,该字符串不是按字典顺序排序的。我建议切换到yyyy-MM-dd,所以2019-01-09。如果你想获得一月份的所有帖子这样一来,你可以做一个范围查询:

ref.orderByChild("date").startAt("2017-01-01").endAt("2017-01-31") 

如果你已经知道你要每月排行榜,我建议你改变你的数据库结构,以体现。所以:按月存储的得分,他们是在:

2017-01 
    -K34761761238712 
    name: "GGGG" 
    score: 3 
    -K4875731941298a 
    name: "AAA" 
    score: 1 

这样,你可以得到高分月份依次为:

ref.child("2017-01").orderByChild("score").limitToLast(10) 
+0

嘿,我现在已经整理这个像这样并且我无法每月都获得最佳效果:http://i.imgur.com/eAvZRen.png – chazefate

+0

使用截图中的当前结构,您只能获得每日排行榜。如果你想要一个每月的排行榜,你应该像我在我的回答中一样存储每月排行榜。 –

+0

非常感谢! – chazefate