我正在从 firebase Realtime Db 获取数据并获取 recyclerview 问题是 Collection.shuffling 在 android studio 中重复相同的项目

Posted

技术标签:

【中文标题】我正在从 firebase Realtime Db 获取数据并获取 recyclerview 问题是 Collection.shuffling 在 android studio 中重复相同的项目【英文标题】:I am getting data from firebase Realtime Db and fetching on recyclerview issue is Collection.shuffling is repeating same item in android studio 【发布时间】:2021-12-27 03:05:42 【问题描述】:

这是我的代码。另外,我正在使用自动点击索引 0,如何在洗牌时停止重复项目?

     if (ref != null) 
            ref.addValueEventListener(new ValueEventListener() 
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                    if (dataSnapshot.exists()) 
                        list = new ArrayList<>();
                        String state;
                        String UserEmail;
                        for (DataSnapshot ds : dataSnapshot.getChildren()) 
                            Deal value = ds.getValue(Deal.class);
                            value.setKey(ds.getKey());
                            state = "" + ds.child("VideoStatus").getValue();
                            if (state.equals("incomplete"))
                                list.add(value);
                            Collections.shuffle(list);

                        
                        AdapterClassssautoclicker adapterClassssautoclicker = new AdapterClassssautoclicker(list);
                        recyclerView.setAdapter(adapterClassssautoclicker);

//                        recyclerView.swapAdapter(adapterClassssautoclicker);

                    


                    int pos = 0;
                    new Handler().postDelayed(new Runnable() 
                        @Override
                        public void run() 
                            if (recyclerView.findViewHolderForAdapterPosition(pos) != null)
                                Objects.requireNonNull(recyclerView.findViewHolderForAdapterPosition(pos)).itemView.performClick();
                        
                    , 1);

                

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) 
                    Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();

                
            );

        


    

【问题讨论】:

这段代码中到底有什么不符合您的预期?告诉我们共享代码有什么问题。你有什么错误吗? 代码重复项目我想在洗牌时删除重复 【参考方案1】:

根据你上一条评论:

代码正在重复我想在洗牌时删除重复的项目

要解决这个问题,你必须得到下面这行代码:

Collections.shuffle(list);

如您在以下代码行中看到的那样,退出 for 循环:

for (DataSnapshot ds : dataSnapshot.getChildren()) 
    Deal value = ds.getValue(Deal.class);
    value.setKey(ds.getKey());
    state = "" + ds.child("VideoStatus").getValue();
    if (state.equals("incomplete"))
        list.add(value);

Collections.shuffle(list);

通过这种方式,您只会对元素进行一次洗牌,而不是每次迭代。这样可以避免重复元素。

【讨论】:

嘿 Crc Pcl。您是否尝试过我上面的解决方案,它有效吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!

以上是关于我正在从 firebase Realtime Db 获取数据并获取 recyclerview 问题是 Collection.shuffling 在 android studio 中重复相同的项目的主要内容,如果未能解决你的问题,请参考以下文章

在单个 Activity 中使用 2 个或更多 Firebase Realtime DB

我正在使用 Firebase RealTime DB .. 我想做的就是让所有用户的分数为零

Flutter firebase realtime db 在规则中使用 displayName

从 firebase-realtime-database 过滤数据

Flutter:Firebase Realtime 从对象列表中删除对象

在明确删除之前,SingleValueEvent 侦听器是不是计入 Firebase RealTime DB 中的“同时连接”?