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)
但它并没有解决它,当我从应用程序中出去并再次输入时,它可以完美运行并显示项目而不会重复任何人,我该如何解决?
发生的事情是每次侦听器返回数据时 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)
希望你的错误得到解决。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |