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で唯一の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を()マップと、これはちょうどあなたがあなたのデータベースに更新されているアイテムを更新します