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

我正在根据从数据库中获取数据,然后将数据插入到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) { }

    });


至尊宝的传说
浏览 83回答 2
2回答

白衣染霜花

问题解决了。原因是if语句正在交换详细信息对象中添加整个数据,如果它找到一个用户ID,然后它找到另一个并再次添加所有这些用户ID等。所以我只是在if语句中创建了布洛尔,如果它找到了交换器ID,然后使用插件范围之外的适配器,则使其成为真。&nbsp;shiftSwapDb.addChildEventListener(new ChildEventListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onChildAdded(DataSnapshot dataSnapshot, String s) {&nbsp; &nbsp; &nbsp; &nbsp; if (dataSnapshot.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SwapDetails swapDetails = dataSnapshot.getValue(SwapDetails.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (swapDetails.getSwapperID().equals(fromID)) {hasSwaperID = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }移位配置文件Adapter.add(swapDetails);

翻阅古今

试试这个@Overridepublic void onChildAdded(DataSnapshot dataSnapshot, String s) {&nbsp; &nbsp; if (dataSnapshot.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; SwapDetails swapDetails = dataSnapshot.getValue(SwapDetails.class);&nbsp; &nbsp; &nbsp; &nbsp; if (swapDetails.getSwapperID().equals(fromID)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; swapBodyList.add(swapDetails);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shiftProfileAdapter.notifyItemInserted(swapBodyList.length - 1);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java