我如何从Firebase获取特定的子值取决于日期(DAY)

时间:2019-02-21 14:03:02

标签: android firebase firebase-realtime-database

这是我的数据结构

enter image description here

因此0是该月的第一天,依此类推。所以基本上它是循环的,但我不知道该怎么办。我需要一个从哪里开始或应该做什么的想法。

我想要的输出是

因此,如果它是该月的第一天,那么孩子的价格为0,则价格为1,第二天为2

这是我的代码

    mRef3 = mRef.child(key).child("promos").child("regular").child(ym).child("price").child("guest1/0");




 mRef3.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    String price = dataSnapshot.getKey()+": "+dataSnapshot.getValue();
                    holder.rPrice.setText("FROM " + getString(R.string.currency) + " " + price + " per night ");
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

当前输出: 每晚USD 0:1起

2 个答案:

答案 0 :(得分:1)

如果要在特定的一天从数据库中读取值,可以执行以下操作:

DatabaseReference dayRef = FirebaseDatabase.getInstance().getReference("price/guest1/0");
dayRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        System.out.println(dataSnapshot.getKey()+": "+dataSnapshot.getValue(Long.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

如果要从数据库中读取整天的值,则将侦听器附加一级,然后遍历快照的子级:

DatabaseReference dayRef = FirebaseDatabase.getInstance().getReference("price/guest1");
dayRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot daySnapshot: dataSnapshot.getChildren()) {
            System.out.println(daySnapshot.getKey()+": "+daySnapshot.getValue(Long.class));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

如果要获取每月0日开始的日期:

Calendar.getInstance().get(Calendar.DAY_OF_MONTH)

答案 1 :(得分:0)

我不确定我是否清楚地理解了您的问题,但是如果您要查找特定日期的价格(即每月1号为0,则价格应为1,依此类推),那么您可能必须做这样的事情

在方法getDay中,您可以传递今天是星期几

FirebaseDatabase.getInstance().getReference().child("price").child("guest1").child(getDay()).addChildEventListener(
            new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot,
                        @Nullable String s) {
                    //get your price here
                    String price = (String) dataSnapshot.getValue();

                }

                @Override
                public void onChildChanged(@NonNull DataSnapshot dataSnapshot,
                        @Nullable String s) {

                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot,
                        @Nullable String s) {

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });