2017-01-09 320 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