OrderByChild()未正确排序(或根本不排序)

时间:2017-02-10 05:34:14

标签: android firebase firebase-realtime-database

我有一个Firebase数据库,看起来像这样。应该注意的是,我通过获取纪元时间并从零中减去它来创建artCreated值:

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的值,该值以负数(从最小到最大)开始,并且还做一个负数,其余为正(从最小到最小)并且得到相同的值结果。 artCreated密钥似乎对订单没有影响。

没有任何工作。它始终与存储在数据库中的顺序相同。我究竟做错了什么。我已就此提出了一些答案,但没有任何对我有用。

1 个答案:

答案 0 :(得分:0)

有人指出有两种方法可以做到这一点:

  1. 操纵数据客户端
  2. 创建一个将订购数据的查询
  3. 我发现这样做的最简单方法是使用选项1,但通过LinkedList。我只是将每个对象附加到堆栈的前面。它足够灵活,仍允许列表在ListViewRecyclerView中使用。这种方式即使它们按最新到最新的顺序排列,您仍然可以查看或检索最新到最旧的。