如何按升序或降序排列firebase数据库数据?

时间:2017-12-08 20:51:23

标签: android firebase firebase-realtime-database

我已经设置了一个firebase数据库,我想知道我是如何制作它的,以便我的listView以升序或降序显示我的数据。

例如:如果我想要的东西是最贵的,我会在listView的顶部和底部的便宜的那些。

基本上我正在尝试创建一个排名活动,其中我有两个单独的列表视图,按成本和单独计数。

Here's my database:

这就是我的计算所在:

  @Override
    protected void onStart() {
        super.onStart();

        itemlists=new ArrayList<String>();
        databaseItems.child("items").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot itemSnapShot : dataSnapshot.getChildren()) {
                    String itemname=itemSnapShot.child("itemName").getValue().toString();

                    itemlists.add(itemname);
                    adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1,itemlists);
                    listFinalCount.setAdapter(adapter);

                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

2 个答案:

答案 0 :(得分:3)

如果要订购Firebase数据库查询的结果,则需要使用数字作为值,字符串。如果您保留字符串,就像我在屏幕截图中看到的那样,您需要知道字符串已订购lexicographically,并且我确定这不是您要查找的内容。

以升序或降序排序数据的最简单方法是在客户端。默认情况下,Firebase可以按给定属性按升序排序结果。 Firebase中没有方法按降序排序,但可以进行一些调整。

如果您使用RecyclerView来显示数据,最简单的方法是使用以下代码:

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);

这个approch会改变您的订单。

另一种方法是创建自己的适配器,扩展FirebaseListAdapter并覆盖getItem()方法。

另一种方法是从数据库中获取数据,将其添加到CollectionList是一个很好的解决方案,然后使用Collections.reverse(yourList);

答案 1 :(得分:0)

officail documentation

中所述
firebaseDatabase.getReference().child("items").orderByChild("itemCost").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
               //list.clear(); clear the list before updating.
               for(DataSnapshot dataSnapshot : snapshot.getChildren()) {
                  // todo here
               }
               Adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                System.out.println("The read failed: " + error.getCode());
            }
        });

注意:任何没有我们正在查询的子键的节点都使用 null 值排序,这意味着它将排在第一位。