2017-04-26 55 views
0

我正在使用Firebase數據庫。我的「用戶」數據看起來像這樣:在ListView中顯示來自Firebase的降序順序

Users { 
    "38NFjDwCPAdkdvbzLb1VkFeaBIV2" : { 
    "points" : 10, 
    "userEmail" : "[email protected]", 
    "userName" : "Tom" 
    }, 
    "pH3HWzu9SVbW56jwqCb55hHryAD2" : { 
    "points" : 17, 
    "userEmail" : "[email protected]", 
    "userName" : "Jerry" 
    } 
} 

現在我想顯示用戶根據他們的點,按降序。我可以使用orderByChild("points"),但只能按升序顯示列表。

這是我現在在做:

public class Leaderboards extends AppCompatActivity { 

    private ListView leaderboardsList; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_leaderboards); 

     leaderboardsList = (ListView) findViewById(R.id.leaderboardList); 

     DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 

     DatabaseReference userRef = rootRef.child("Users"); 

     DatabaseReference carsRef = rootRef.child("Card"); 
     Query qUserRef = userRef.orderByChild("points"); 

     FirebaseListAdapter<User_DB> firebaseListAdapter = new FirebaseListAdapter<User_DB>(this, User_DB.class, android.R.layout.simple_list_item_1, qUserRef) { 
      @Override 
      protected void populateView(View v, User_DB model, int position) { 

       String points = String.valueOf(model.getPoints()); 
       ((TextView)v.findViewById(android.R.id.text1)).setText(points); 

      } 
     }; 

     leaderboardsList.setAdapter(firebaseListAdapter); 
    } 

} 

我怎樣更改上面的代碼,以顯示我的遞減順序列表,根據每個用戶的點?

+0

沒有內置的方式以降序獲得結果。常見的解決方案是保留具有反向值的額外屬性(即'negativeScore')或做倒置客戶端(假設列表顯示在移動設備上,它永遠不會很長)。請參閱http://stackoverflow.com/questions/34156996/firebase-data-desc-sorting-in-android –

+0

嘿謝謝你的想法。我會試着做你所說的關於製造另一個帶有負分的屬性。 –

回答

-1

您需要爲每個數據設置優先級並使用orderByPriority函數。
因爲在Firebase上,我們無法設置降序或升序排序。

+0

'orderByChild'呢? –

+0

'orderByChild'總是按升序排序。 – wakwak3125

+0

無論您使用'orderByKey','orderByValue','orderByChild'或orderByPriority()',Firebase中的所有排序都是遞增的。請參閱https://firebase.google.com/docs/database/android/lists-of-data#data-order。沒有理由再使用'orderByPriority()'。看到http://stackoverflow.com/a/31578297/209103 –