如何在不重复的情况下从 firebase 数据库获取数据

Gos*_* Cb 0 java android firebase-realtime-database

我正在开发一个使用 firebase 数据库的 android 应用程序,当用户将项目添加到数据库时,应用程序会实时显示它,这是我想要的,但问题是同一个项目在 RecyclerView 中显示不止一次是我尝试的代码

 data = new ArrayList<>();

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("workers");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                e_iv.setVisibility(View.GONE);
                e_tv.setVisibility(View.GONE);
                rv_all.setVisibility(View.VISIBLE);
                for (DataSnapshot ds : snapshot.getChildren()) {
                    for (DataSnapshot d : ds.getChildren()) {
                        data.add(d.getValue(work.class));
                    }
                    
                }
                mAdapter = new aAdapter(data);

                rv_all.setAdapter(allGamesAdapter);
                mAdapter.notifyDataSetChanged();
            }
Run Code Online (Sandbox Code Playgroud)

但它并没有解决它,当我从应用程序中出去并再次输入时,它可以完美运行并显示项目而不会重复任何人,我该如何解决?

Vat*_*ani 5

发生的事情是每次侦听器返回数据时 ArrayList 都会添加数据。要删除重复项,只需清除onDataChange()函数内的数组列表

data = new ArrayList<>();

DatabaseReference myRef = 
FirebaseDatabase.getInstance().getReference().child("workers");
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        if (snapshot.exists()) {

            data.clear();

            e_iv.setVisibility(View.GONE);
            e_tv.setVisibility(View.GONE);
            rv_all.setVisibility(View.VISIBLE);
            for (DataSnapshot ds : snapshot.getChildren()) {
                for (DataSnapshot d : ds.getChildren()) {
                    data.add(d.getValue(work.class));
                }
                
            }
            mAdapter = new aAdapter(data);

            rv_all.setAdapter(allGamesAdapter);
            mAdapter.notifyDataSetChanged();
        }
Run Code Online (Sandbox Code Playgroud)

希望你的错误得到解决。