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