ICEBlizzard :
나는 내 코드 바랍니다 도움말 Me에서 잘못 무슨 일이 일어나고 있는지 모른다. 그냥 목록보기에 데이터를 검색하려고합니다.
내 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;
}
아래 이미지는 있습니까
나는 그냥이 값을 업데이트 할
그것은 더 많은 항목을 생성 이유를 모르겠어요
나는 중포 기지에서만 3 아이들이
난 그냥 데이터를 검색하고, 데이터는 중포 기지 콘솔에서 수동으로 저장됩니다
도움말 나하세요 ...
가스통 Saillen :
당신이 당신의 데이터베이스의 값을 업데이트 할 때 트리거됩니다
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {...
다시 말하지만, 그것은 당신의 내부에 있기 때문에 다시이 항목을 중복됩니다 (업데이트 된 일 포함) 모든 어린이를 위해 가져옵니다 및 목록 내부에 배치됩니다 onDataChange
당신이 그 모든 어린이 축복하는 뜻 루프 다시 루프를 가지고 다시 추가합니다 현재 인구 목록입니다.
당신이해야 할 일은, 다시 가져올 때 목록을 취소하는 것입니다
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 ()를 , 이것은 단지 당신이 당신의 데이터베이스에 업데이트하는 항목을 업데이트하는지도