在 Firebase 实时回收器视图中仅过滤和加载非重复名称

问题描述 投票:0回答:1

我的应用程序从包含类别和其他项目的列表中加载项目

列表是这样的,有重复的类别名称

enter image description here

我想要做的是仅加载类别名称而不重复现有名称

示例:电视节目、太空、自然、汽车

我的鳕鱼:

        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data");
        Query query = databaseReference.orderByChild("category");
        query.addValueEventListener(new ValueEventListener() {
            @SuppressLint("NotifyDataSetChanged")
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
               // dataList.clear();
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    ModelCatMenu dataClass = dataSnapshot.getValue(ModelCatMenu.class);
                    dataList.add(dataClass);
                }

                adapter.notifyDataSetChanged();
            }

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

            }
        });

数据:

{
  "Data": {
    "-Nw1n4qAQ7FIlbDVeDCN": {
      "category": "Abstract",
      "imageLink": "https://",
      "name": "name"
    },
    "-Nw1nB5__Qwrabgu3yJe": {
      "category": "Abstract",
      "imageLink": "https://",
      "name": "name"
    },
    "-Nw1nKaT_BZUlmKXjnIy": {
      "category": "3D",
      "imageLink": "https://",
      "name": "3d"
    },
    "-Nw1nRl-PgB6DKUMSsRb": {
      "category": "Film",
      "imageLink": "https://",
      "name": "name"
    },
    "-Nw2Vfv1SkB8QVHSdPFC": {
      "category": "Film",
      "imageLink": "https://",
      "name": "name"
    },
    "-Nw2lBoNGo0z79CwXuJq": {
      "category": "Film",
      "imageLink": "https://",
      "name": "name"
    }
  }
}

我尝试过,但没有成功,缺少一些东西

List<String> uniqueCategories = new ArrayList<>();
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            Category category = snapshot.getValue(Category.class);
            String categoryName = category.getCategory();

            if (!uniqueCategories.contains(categoryName)) {
                uniqueCategories.add(categoryName);
            }

        }
     adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Trate o erro, se necessário
    }
});
java android android-studio firebase-realtime-database
1个回答
0
投票

它不起作用的原因是,当您尝试检查列表是否包含某些项目时,它将检查对象的默认

equals
函数,如果某些值不同,则该函数为 false。例如,如果类别相同但任何其他值不同,则会返回 false。要解决这个问题,您唯一需要做的就是重写数据模型上的
equals
函数,并仅检查
category
的值,而不管其余变量如何。这样就可以过滤掉重复的项目。

© www.soinside.com 2019 - 2024. All rights reserved.