【问题标题】:when I manually change value in firebase database I create more items in listview instead of updating value in listview当我手动更改 firebase 数据库中的值时,我在 listview 中创建更多项目,而不是在 listview 中更新值
【发布时间】:2020-03-12 13:01:36
【问题描述】:

我不知道我的代码出了什么问题,请帮助我。 只是试图检索数据到列表视图。

我的 MainActivity.java

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) {

        }
    });
}

}

我的用户.java

public class User {

private String name;
private String email;
private String phone;
private String userName;
private String password;

public User() {
}

public User(String name, String email, String phone, String userName, String password) {
    this.name = name;
    this.email = email;
    this.phone = phone;
    this.userName = userName;
    this.password = password;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

以下是图片

我只想更新值

我不知道为什么它会创建更多项目

我在火力基地只有 3 个孩子

我只是在检索数据,数据是从 firebase 控制台手动保存的

请帮帮我...

【问题讨论】:

  • 现在不工作它只显示 1 个项目

标签: java android firebase listview firebase-realtime-database


【解决方案1】:

当您更新数据库中的值时,它会触发您的

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) {

        }
    });

另一种方法是将updateChildren() 与地图一起使用,这只会更新您在数据库中更新的项目

【讨论】:

  • 感谢您抽出宝贵时间,先生。会尝试一下
猜你喜欢
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多