2017-02-10 182 views
1

我有一個Firebase數據庫,看起來像這樣。應當指出的是,我通過獲得劃時代的時間和從零減去創建artCreated值:OrderByChild()沒有正確排序(或根本沒有排序)

enter image description here

我想獲得最新的提交,但是我還沒有拿到訂單逆轉。這裏是我的代碼:

public class RecentArtRecyclerViewAdapter extends RecyclerView.Adapter<RecentArtRecyclerViewAdapter.ArtworkViewHolder> { 

    //List<ArtworkModel> artwork; 

    private Context context; 
    private DatabaseReference dbReference; 
    private ChildEventListener mChildEventListener; 

    ArrayList<String> artworkKeys = new ArrayList<>(); 
    ArrayList<ArtworkModel> artwork = new ArrayList<>(); 

    public RecentArtRecyclerViewAdapter(Context context, DatabaseReference dbReference){ 
     this.context = context; 
     this.dbReference = dbReference; 

     dbReference.limitToFirst(100); 

     ChildEventListener childEventListener = new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       Log.d(TAG, "Artwork added..."); 

       ArtworkModel artworkModel = dataSnapshot.getValue(ArtworkModel.class); 

       artwork.add(artworkModel); 
       artworkKeys.add(dataSnapshot.getKey()); 
       notifyItemInserted(artwork.size()-1); 
      } 

我通過在DB查詢,它看起來像:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); 
    final DatabaseReference artRef = databaseReference.child("artwork"); 

我曾嘗試做這樣的事情得到相反的順序(最近):

dbReference.limitToFirst(100); 
dbReference.limitToLast(100); 
dbReference.orderByChild("artCreated"); 
dbReference.orderByChild("artCreated").limitToLast(10); 
dbReference.orderByChild("artCreated").limitToFirst(10); 

我也嘗試更改artCreated的值,該值始於一切爲負數(從最小到最大),也做一個負數,其餘正數(最大到最小)並得到相同的結果。關鍵似乎對訂單沒有影響。

沒有任何工作。它始終與它存儲在數據庫中的順序相同。我究竟做錯了什麼。我已經參考了一些關於此的答案,但沒有任何工作適合我。

+0

[Firebase Data Desc Sorting in Android]可能的重複(http://stackoverflow.com/questions/34156996/firebase-data-desc-sorting-in-android) –

+0

@vishnunarayanan我已經引用過並嘗試過它。 – BlackHatSamurai

+0

@BlackHatSamurai可能是由於'artCreated'在我們的數據庫中是'string'類型的嗎? – Droidwala

回答

0

有人指出,有2種方式來做到這一點:

  1. 操縱數據的客戶端
  2. 進行查詢,將責令數據

最簡單的方法是我發現這樣做是使用選項1,但通過LinkedList。我只是將每個對象追加到堆棧的前面。它足夠靈活,仍然允許列表在ListViewRecyclerView中使用。這樣,即使它們按照最舊到最新順序排列,仍然可以查看或檢索最新到最舊的。