# #android #firebase #firebase-realtime-database #google-cloud-firestore
Вопрос:
Как изменить изменение базы данных в реальном времени на код Firestore?
Теперь я использую этот код для реализации своей функции в режиме реального времени
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Saves").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
progressDialog.dismiss();
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
mySaves.add(snapshot.getKey());
}
readSaves();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
private void readSaves() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
progressDialog.dismiss();
postList_saves.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
PostModel postModel = snapshot.getValue(PostModel.class);
for(String id : mySaves){
if(postModel.getPostid().equals(id)){
postList_saves.add(postModel);
}
}
}
myFotoAdapter_saves.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
моя структура БД
Я попытался изменить этот код
CollectionReference ref = db.collection("Saves");
ref.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException error) {
if(error != null){
return;
}
for(DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()){
DocumentSnapshot documentSnapshot = dc.getDocument();
mySaves.add(documentSnapshot.getKey());
}
readSaves();
}
});
private void readSaves() {
db.collection("Posts").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
if(!queryDocumentSnapshots.isEmpty()){
progressDialog.dismiss();
postList_saves.clear();
List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
for (DocumentSnapshot d : list){
PostModel post = d.toObject(PostModel.class);
postList_saves.add(post);
}
myFotoAdapter_saves.notifyDataSetChanged();
} else {
Toast.makeText(getApplicationContext(), getApplicationContext().getResources().getString(R.string.noData), Toast.LENGTH_SHORT).show();
}
}
});
}
Но, это имеет ошибку error: cannot find symbol mySaves.add(documentSnapshot.getKey());
и не могу отфильтровать данные, у меня все записи не сохранены по дате. Я думаю, что я не понимаю ключевых ценностей.
Как мне изменить код?
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде скриншота и укажите точные данные, которые вы хотите получить.
2. @AlexMamo Извините за это, я обновил контекст
3. И вы хотите получить все идентификаторы документов и добавить их в
mySaves
список?4. «Я виноват», какую ошибку вы получили?
5. @AlexMamo да, мне нужно получить снимок.getKey(), но я не знаю, как это сделать.