【问题标题】:Android Firebase realtime database filter parents [duplicate]Android Firebase实时数据库过滤器父母[重复]
【发布时间】:2018-07-21 09:31:24
【问题描述】:

我正在使用 Firebase 制作一个基本的体育统计 Android 应用程序,但我不确定在阅读时如何过滤数据库库。我的数据库结构如下,我将如何过滤搜索以便我只得到包含team1:redsoxteam2:yankees 孩子的父母,而忽略game3?

数据库图片:

【问题讨论】:

  • Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成单个(合成)属性。例如,您可以添加一个属性"teams": "red sox_yankees",然后对其进行过滤。有关此方法和其他方法的示例,请在此处查看我的答案:stackoverflow.com/questions/26700924/…

标签: android database firebase firebase-realtime-database


【解决方案1】:

假设 game1game2game3 节点是 Firebase 数据库根的直接子节点,要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String team1 = ds.child("team1").getValue(String.class);
            String team2 = ds.child("team2").getValue(String.class);
            if(team1.equals("redsox") && team2.equals("yankees")) {
                Log.d("TAG", "Foaund only: team1:redsox and team2:yankees");
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
rootRef.addListenerForSingleValueEvent(valueEventListener);

但请注意,game1 中的 team1 是 red sox(两个单词),而 game2 中的 team1 是 redsox(单个单词)。为了使equals() 方法起作用,两个属性应该保持相同的值,red soxredsox

【讨论】:

  • 你试过我上面的解决方案,行得通吗?
猜你喜欢
  • 2020-07-19
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2022-06-10
  • 2021-09-09
相关资源
最近更新 更多