value를 가져올 때 User01, User02에 해당하는 document Id도 포함해서 파싱하세요. 제 기억으로는 toObject메소드로 파싱할 때 id 필드가 존재하면 자동으로 document id가 해당 필드에 저장되었던 기억이 있네요.
public class User {
public String id;
public String value;
// constructror, getter, setter 생략
}
public class UserRepository {
interface Listener {
onUserFetched(List<User> users);
onUserFetchError(Throwable error);
}
private Listener listener;
public void setListener(Listener listener) {
this.listener = listener;
}
public void fetchUsers() {
db.collection("cities")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (!task.isSuccessful()) {
if (listener != null) listener.onUserFetchFailure(task.getException());
return;
}
List<User> users = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
User user = document.getData().toObject(User.class);
// id 필드가 자동으로 채워지지 않으면 user.setId(document.getId()); 호출
users.add(users);
}
if (listener != null) listener.onUserFetchError(users)
}
});
}
}