【问题标题】:Data is getting duplicated when fetched from Firebase in a ListView从 ListView 中的 Firebase 获取时,数据会重复
【发布时间】:2020-07-25 02:19:09
【问题描述】:

我正在尝试使用 addValueEventListner 在 ListView 中获取 Firebase 实时数据库中“学生”实例的所有子项。但是当我添加一个新条目时,它开始复制 ListView 中的先前条目(但不在实时数据库中),就像我已经成功上传了 8 个条目一样,当我尝试添加第 9 个条目时,它会复制 ListView 中的第一个条目和第 9 个没有.添加的条目并未全部显示。当我添加第 10 个条目时,它会复制 ListView 中的第 2 个条目,依此类推。它不显示第 8 次之后的下一个条目,并且与以前的条目重复。但在 Firebase 数据库中,一切正常。

这是我从 Firebase 数据库中检索数据的代码。

studentModelArrayList = new ArrayList<>();
        allStudentsAdapter = new AllStudentsAdapter(ViewAllStudentsActivity.this, studentModelArrayList);
        listView.setAdapter(allStudentsAdapter);


        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                studentModelArrayList.clear();

                    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                        StudentModel studentModel = postSnapshot.getValue(StudentModel.class);
                        studentModelArrayList.add(studentModel);
                    }
                allStudentsAdapter.notifyDataSetChanged();
                }

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

            }
        });


    }

我已经应用了我所有的知识并在 StackOverflow 上浏览了所有相关的东西,我不知道我做错了什么。请帮忙。

【问题讨论】:

    标签: firebase firebase-realtime-database duplicates


    【解决方案1】:

    只需在 ondatabse 更改中的 for 循环之后放置这行而不是 notifydataset `

     allStudentsAdapter = new AllStudentsAdapter(ViewAllStudentsActivity.this, studentModelArrayList);
        listView.setAdapter(allStudentsAdapter);` 
    

    那么你就会明白为什么会这样了。

    【讨论】:

    • 感谢您的建议,但它表现出相同的行为。我认为 valueEventListner 正在复制条目并阻止新条目显示在 ListView 中,但我无法弄清楚如何更改它。
    • 你可以使用 addlistenerForSingleValueEvent 因为它只调用一次
    【解决方案2】:

    是的, 我自己解决了。实际上这是我的列表视图的问题(列表视图不适用于 Firebase)所以我将我的列表视图更改为 RecyclerView,现在它就像一个魅力一样工作。当我从 Firebase 请求更多数据时,我的列表视图开始出现行为不端,就像在复制条目一样。现在通过 Recyclerview 处理数据变得非常容易。

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2020-06-14
      • 2023-01-17
      • 2018-08-25
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多