android - 我如何从 firebase 获取多个 key

标签 android firebase firebase-realtime-database

![在此处输入图片描述][1]

 mAdapter = new FirebaseRecyclerAdapter<Adapter_Hotels, Adapter_HotelsHolder>(mOptions) {
            @Override
            protected void onBindViewHolder(@NonNull final Adapter_HotelsHolder holder, int position, @NonNull Adapter_Hotels model) {

            String key = getRef(position).getKey();
            mRef1 = mRef.child(key).child("rooms");
            mRef1.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot child : dataSnapshot.getChildren()) {
                        roomkey = child.getKey();
                    }
                    minmax.clear();
                    mRef2 = mRef1.child(roomkey).child("promos").child("regular").child(ym).child("price").child(guest);
                    mRef2.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                            }

                        }

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

                        }
                    });
                }

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

                }
            });

        }

这是我所有的查询。这是可取的吗?一切正常,我删除了所有用于检索的代码。我的问题是还有其他更好或更清洁的方法吗?

最佳答案

您的代码看起来比需要的要复杂一些。据我所知,您可以通过以下方式实现完全相同的效果:

mRef1 = mRef.child(key).child("rooms");
mRef1.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot roomSnapshot: dataSnapshot.getChildren()) {
            roomkey = child.getKey();
            DataSnapshot priceSnapshot = roomSnapshot.child(roomkey).child("promos").child("regular").child(ym).child("price").child(guest);
            System.out.println(priceSnapshot.getValue());
        });
    }

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

变化:

  • 不要将 onCancelled 留空,因为未检测到的错误确实很难解决。
  • 将价格查找放在循环中,以便查找所有房间的价格。如果您只想查找一个房间的价格,则应该使用查询来只读取那个房间。
  • 没有必要为价格本身使用单独的监听器,因为(据我所知)价格已经在 roomsdataSnapshot 中。

关于android - 我如何从 firebase 获取多个 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828111/

相关文章:

android - 无缝 Facebook 登录

java - 使用从游标获取的数据使用 arrayList<String> 填充 ListView

java - Java fftpack的基本使用

spring - 无法使用最新的 Firebase SDK 依赖项解析 FirebaseOptions

javascript - 尝试删除单个子项时整个 Firebase 数据库被删除

firebase - Firebase 的云功能 - 在Write 上发送电子邮件

android - findViewById() 为自定义 View 返回 null - Android

firebase - 如何使用Firebase托管预览 channel 测试云功能?

java - ref.updateChildren() 中的 FirebaseException : Path X is an ancestor of X/Y in an update

javascript - 展平 Angular2 中的可观察数组