我如何使用LIFO规则从Firebase读取数据

时间:2019-04-06 02:50:48

标签: java android firebase firebase-realtime-database

我可以正常读取数据,但是这次我想使用LIFO规则从firebase读取数据时,我无法读取任何类型的数据。但我想从Firebase读取数据,最后一次数据来自我的Firebase

 dref.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    String root_order = dataSnapshot.getKey();
                    for (long i = dataSnapshot.getChildrenCount(); i <= 0; i--) {
                        studentList.clear();
                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                            Student student = snapshot.getValue(Student.class);
                            studentList.add(student);
                        }
                        listView.setAdapter(adapter);
                    }
                }
            });


  [1]: https://i.stack.imgur.com/f5pPw.png

2 个答案:

答案 0 :(得分:0)

Firebase中没有隐式的数据排序,因此“后入”仅在您的数据结构可以确保的情况下才有意义。

例如,如果您使用Firebase的push()方法添加新子级,则它们的键在字典上会不断增加。在这种情况下,您只能通过以下方式获得最新的商品:

dref.orderByKey().limitToLast(1).addValueEventListener(new ValueEventListener() {
  ...

如果您不使用push(),那么获取最新项目的唯一方法是确保每个子节点中都有一个带有时间戳的属性,通常是writing a server-side timestamp。每个孩子都有这样的时间戳记后,您可以通过以下方式获取最新的项目:

dref.orderByChild("timestamp").limitToLast(1).addValueEventListener(new ValueEventListener() {
  ...

答案 1 :(得分:0)

                double dist = totalDistance / 1000.0;
                int days = totalSeconds / 86400;
                int hours = (totalSeconds - days * 86400) / 3600;
                int minutes = (totalSeconds - days * 86400 - hours * 3600) / 60;
                int seconds = totalSeconds - days * 86400 - hours * 3600 - minutes * 60;

                Common.DISTANCE = String.valueOf(dist + " km ");
                Common.DURATION = String.valueOf(hours + " hours " + minutes + " mins " + seconds + " seconds ");

                SimpleDateFormat DBFormat = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
                String currentDateandTime = DBFormat.format(new Date());

                Date date = null;
                try {
                    date = DBFormat.parse(currentDateandTime);
                } catch (ParseException e) {
                    e.printStackTrace();
                }

                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                calendar.add(Calendar.HOUR, hours);
                calendar.add(Calendar.MINUTE, minutes);
                calendar.add(Calendar.SECOND, seconds);
                Log.v("1st",""+calendar.getTime());
                Common.ESTIMATED_TIME = String.valueOf(calendar.getTime());

如果需要一个一个的数据,可以使用Query query = FirebaseDatabase.getInstance().getReference().child("node name") .orderByKey().endAt(lastKey).limitToLast(5);

ChildEventListener

如果需要节点的完整快照,可以使用query.addChildEventListener(childEventListener);

ValueEventListener