Java 当我手动更改firebase数据库中的值时,我会在listview中创建更多项,而不是更新listview中的值
我不知道我的代码出了什么问题,请帮助我。 只是尝试检索列表视图中的数据 My MainActivity.javaJava 当我手动更改firebase数据库中的值时,我会在listview中创建更多项,而不是更新listview中的值,java,android,firebase,listview,firebase-realtime-database,Java,Android,Firebase,Listview,Firebase Realtime Database,我不知道我的代码出了什么问题,请帮助我。 只是尝试检索列表视图中的数据 My MainActivity.java public class MainActivity extends AppCompatActivity { ListView listView; FirebaseDatabase database; DatabaseReference ref; ArrayList<String> list; ArrayAdapter <String> adapter; Us
public class MainActivity extends AppCompatActivity {
ListView listView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<String> list;
ArrayAdapter <String> adapter;
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
user = new User();
listView = findViewById(R.id.listView);
database = FirebaseDatabase.getInstance();
ref = database.getReference("match1contest1");
list = new ArrayList<>();
adapter = new ArrayAdapter<String>(this,R.layout.user_info,R.id.userInfo, list);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
user = ds.getValue(User.class);
list.add(user.getName().toString()+user.getEmail().toString());
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
下面是图片
我只想更新值
我不知道为什么它会创建更多的项目
我在firebase只有3个孩子
我只是在检索数据,数据是从firebase控制台手动保存的
请帮助我…当您更新数据库中的值时,它将触发
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {...
同样,这将获取所有子项(包括更新的子项),并再次放入列表中。这将复制项目,因为在onDataChange
中,您有一个for循环,该循环将再次遍历所有子项,并将它们再次添加到当前填充的列表中
您需要做的是在再次获取时清除列表
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
list.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
user = ds.getValue(User.class);
list.add(user.getName().toString()+user.getEmail().toString());
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
另一种方法是使用地图,这只会更新您在数据库中更新的项目谢谢您抽出时间,先生。将尝试它现在不工作,它只显示1个项目
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
list.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
user = ds.getValue(User.class);
list.add(user.getName().toString()+user.getEmail().toString());
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});