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

Android OrderByChild()排序不正确(或根本不正确),android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个Firebase数据库,看起来像这样。需要注意的是,我通过获取历元时间并将其从零中减去来创建artCreated值: 我正在尝试获取最近提交的内容,但我无法获得反转的命令。这是我的密码: public class RecentArtRecyclerViewAdapter extends RecyclerView.Adapter<RecentArtRecyclerViewAdapter.ArtworkViewHolder> { //List<ArtworkMo

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

我正在尝试获取最近提交的内容,但我无法获得反转的命令。这是我的密码:

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);
            }
我尝试通过以下方式获得相反的顺序(最近):

dbReference.limitToFirst(100);
dbReference.limitToLast(100);
dbReference.orderByChild("artCreated");
dbReference.orderByChild("artCreated").limitToLast(10);
dbReference.orderByChild("artCreated").limitToFirst(10);
我还尝试更改了
artCreated
的值,该值从一个负数(从最小到最大)开始,也做了一个负数,其余为正数(从最大到最小),得到了相同的结果。
artCreated
键似乎对订单没有影响


什么都没用。它在数据库中的存储顺序始终相同。我做错了什么。我已经参考了很多关于这个问题的答案,但是没有什么对我有用

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

  • 在客户端操作数据
  • 进行一个将对数据进行排序的查询

  • 我发现最简单的方法是使用选项1,但是通过
    LinkedList
    。我只是将每个对象附加到堆栈的前面。它足够灵活,仍然允许在
    列表视图
    回收视图
    中使用列表。通过这种方式,即使它们按从最早到最新的顺序排列,您仍然可以查看或检索从最新到最早的数据

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

  • 在客户端操作数据
  • 进行一个将对数据进行排序的查询

  • 我发现最简单的方法是使用选项1,但是通过
    LinkedList
    。我只是将每个对象附加到堆栈的前面。它足够灵活,仍然允许在
    列表视图
    回收视图
    中使用列表。通过这种方式,即使它们按从最早到最新的顺序排列,您仍然可以查看或检索从最新到最早的数据

    可能是@vishnunarayanan的副本我已经引用并尝试过了。@BlackHatSamurai可能是因为
    artCreated
    在我们的db中属于
    string
    类型?@Droidwala这是一个很好的问题。我不认为这会有什么不同,但可能吗?我假设它可以对字符串和int进行排序。@FrankvanPuffelen也许你有答案?可能是@vishnunarayanan的副本我已经引用过并尝试过了。@BlackHatSamurai可能是因为
    artCreated
    在我们的数据库中属于
    string
    类型?@Droidwala这是一个很好的问题。我不认为这会有什么不同,但可能吗?我假设它可以对字符串和int进行排序。@FrankvanPuffelen也许你有答案?
    dbReference.limitToFirst(100);
    dbReference.limitToLast(100);
    dbReference.orderByChild("artCreated");
    dbReference.orderByChild("artCreated").limitToLast(10);
    dbReference.orderByChild("artCreated").limitToFirst(10);