为了账号安全,请及时绑定邮箱和手机立即绑定

如何从实时数据库中删除列表中填充了对象的重复项

如何从实时数据库中删除列表中填充了对象的重复项

至尊宝的传说 2022-09-28 14:26:13
我正在根据从数据库中获取数据,然后将数据插入到a中并通过对话框显示它。userIdlistview我一直在等待的行为是,我将获取用户创建的所有交换,并将它们插入到列表中,以便他可以选择其中一个。但是,只有当他在数据库中只有一个交换时,代码才能正常工作,因为它正常显示。但是,如果他有两个掉期,那么列表中的掉期将乘以两个。如果是三次,那么数据将重复三次,依此类推。我不知道我的代码中的流程是什么,希望有人可以帮助我解决这个问题。如何删除列表中的重复项? private void fetchChooseList() {    DatabaseReference shiftSwapDb = FirebaseDatabase.getInstance().getReference().child("swaps").child("shift_swaps");    final List<SwapDetails> swapBodyList = new ArrayList<>();    Collections.reverse(swapBodyList);    shiftProfileAdapter = new ShiftProfileAdapter(ProfileActivityShift.this, R.layout.shift_profile_list_item, swapBodyList);    listView = chooseShiftProfileDialog.findViewById(R.id.listShiftProfileChooseDialog);    listView.setAdapter(shiftProfileAdapter);    shiftSwapDb.addChildEventListener(new ChildEventListener() {        @Override        public void onChildAdded(DataSnapshot dataSnapshot, String s) {            if (dataSnapshot.exists()) {                SwapDetails swapDetails = dataSnapshot.getValue(SwapDetails.class);                if (swapDetails.getSwapperID().equals(fromID)) {                    shiftProfileAdapter.add(swapDetails);                }            }        }        @Override        public void onChildChanged(DataSnapshot dataSnapshot, String s) { }        @Override        public void onChildRemoved(DataSnapshot dataSnapshot) { }        @Override        public void onChildMoved(DataSnapshot dataSnapshot, String s) { }        @Override        public void onCancelled(DatabaseError databaseError) { }    });
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

问题解决了。原因是if语句正在交换详细信息对象中添加整个数据,如果它找到一个用户ID,然后它找到另一个并再次添加所有这些用户ID等。


所以我只是在if语句中创建了布洛尔,如果它找到了交换器ID,然后使用插件范围之外的适配器,则使其成为真。


 shiftSwapDb.addChildEventListener(new ChildEventListener() {

    @Override

    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        if (dataSnapshot.exists()) {

            SwapDetails swapDetails = dataSnapshot.getValue(SwapDetails.class);

            if (swapDetails.getSwapperID().equals(fromID)) {


hasSwaperID = true;

            }

        }

    }

移位配置文件Adapter.add(swapDetails);


查看完整回答
反对 回复 2022-09-28
?
翻阅古今

TA贡献1780条经验 获得超5个赞

试试这个


@Override

public void onChildAdded(DataSnapshot dataSnapshot, String s) {

    if (dataSnapshot.exists()) {

        SwapDetails swapDetails = dataSnapshot.getValue(SwapDetails.class);

        if (swapDetails.getSwapperID().equals(fromID)) {

            swapBodyList.add(swapDetails);

            shiftProfileAdapter.notifyItemInserted(swapBodyList.length - 1);

        }

    }

}


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信