java - 过滤 firebase 中的子数据

标签 java android firebase firebase-realtime-database

我想填充 recyclerview,以便我可以使用它来显示帖子。

这就是我填充回收器 View 的方式: How can I retrieve data from Firebase to my adapter

my database structure

但是根据用户所在的国家/地区,我需要过滤仅与他的国家/地区相关的帖子。

在数据库结构中,TO、FROM、PASSING、REQUEST FROM 是我需要过滤的内容。 因为在这些参数中我输入了国家/地区代码,所以我可以仅过滤用户所在的国家/地区。

我可以在查询中添加此信息吗?我是否能够从子项中检索其他信息,以便当用户单击 recyclerview 中的帖子时我可以在帖子中显示它。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();             Query query = rootRef.child("Trading info").orderbyChild("TO location").equals(USA);

因此,如果 child 包含美国,它将显示在帖子中,当用户点击帖子时,我是否能够像平常一样检索所有数据。

抱歉,如果没有得到最好的解释。 我想知道,我是否能够从过滤的子节点中检索所有其他子节点。 从子节点中检索子节点中包含 USA 的节点。

<小时/>

并且可以使用多个查询,因为我需要检查 FROM、PASSING、TO 和 REQUEST FROM 位置子节点(如果它包含我需要的国家/地区代码)。

最佳答案

要检索电子邮件姓名可用性,请尝试以下操作:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Trading info");
databaseReference.orderbyChild("TO location").equals("USA").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
         for(DataSnapshot ds : dataSnapshot.getChildren()){
           String fromLocation    = ds.child("FROM location").getValue(String.class);
           String passingLocation = ds.child("PASSING location").getValue(String.class);

              DatabaseReference voluneterService = FirebaseDatabase.getInstance().getReference("Volunteer services");
              voluneterService.orderbyChild("FROM location").equals(fromLocation).addValueEventListener(new ValueEventListener() {
                   @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()){
                        String fromLocation    = ds.child("availability").getValue(String.class);
                        String passingLocation = ds.child("email").getValue(String.class);
                        }
                     }
                    @Override
              public void onCancelled(DatabaseError databaseError) {
                     throw databaseError.toException();
                   }
                });
          }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

首先在节点交易信息处添加引用,然后在属性TO location上使用orderByChild并检索FROM location通过位置

然后添加另一个对节点志愿者服务的引用,并在属性FROM location上使用orderByChild。在 equalTo() 内部使用您在第一个监听器中检索的变量 fromLocation,然后您将能够检索 emailname 可用性

关于java - 过滤 firebase 中的子数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58855314/

相关文章:

java - REST api 服务上下文和资源 url

android - EditText + ImageSpan 移至下一行时消失

android - Cloudant 复制 android 中的所有数据

javascript - 单个文档的多个请求和 500000 个文档的单个请求(Cloud Firestore)哪个性能更好?

ios - 如何检索评论/帖子的键

ios - Firebase,离开我的调试器控制台

BluetoothAdapter.isEnabled() 上的 Java NullPointerException

java.lang.IllegalStateException : CDI API is not available in this environment. 在 org.omnifaces.config.BeanManager

java - 使用日期选择器 android 从今天开始检查用户是否超过 18 年

java - 设置类路径时无法加载main方法