私は手動でfirebaseデータベース内の値を変更したときに私の代わりにリストビューで値を更新するリストビューで複数の項目を作成します

ICEBlizzard:

私は私のコードくださいヘルプミーで間違って何が起こっているのか見当がつかない。ただ、リストビューにデータを取得しよう。

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

        }
    });
}

}

マイUser.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;
}

下の画像であります

これは私のアプリの出力であり、

FireBaseデータベースを手動でI値の変更は、それは画像のように3つの以上の項目を作成した場合

私だけでは値を更新したいです

それはより多くのアイテムを作成する理由を私は知りません

私はfirebaseで唯一の3人の子供を持っています

私はただ、データを取得しています、データがfirebaseコンソールから手動で保存されます

私を助けてください...

ガストンSaillen:

あなたは、データベース内の値を更新すると、それはあなたがトリガされます

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

ここでも、それはあなたの内側にあるため、再び、これはアイテムを複製します(更新1を含む)すべての子供のためにフェッチすると、リストの内側に配置されonDataChange、あなたがそのすべての子供throught意志ループ再び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を()マップと、これはちょうどあなたがあなたのデータベースに更新されているアイテムを更新します

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=275799&siteId=1