Как изменить изменение базы данных в реальном времени в коде firestore?

# #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(), но я не знаю, как это сделать.