У меня есть база данных Firestore, организованная следующим образом:
FirestoreDB
У меня есть три фрагмента: все сообщения,сообщения пользователей, за которыми следит пользователь, и все сообщения пользователя.Моя проблема заключается в том, чтобы получать сообщения отдельных лиц, за которыми следит пользователь, а две другие работают.
Ранее я пытался получить массив из Firestore и использовать этот массив для запроса сообщений следующих пользователей, но яЯ не могу получить доступ к массиву вне метода, который его генерирует, как описано здесь: https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document
Примерно так:
DocumentReference docRef = db.collection("following").document(currentUser.getUid());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
List<String> group = (List<String>) document.get("following");
} else {
}
} else {
}
}
});
Query posts = db.collection("posts").whereEqualTo("userId", group);//Does not compile since cannot resolve group.
Где я тогда создал массив, используя DocumentSnapshot
так как мой запрос выходит за рамки метода, я не могу использовать созданный массив.
В настоящее время у меня не работает следующее:
Query posts = db.collection("posts").whereEqualTo("userId", FirebaseFirestore.getInstance()
.collection("following")
.document(currentUser.getUid()));
Спасибо за любую помощь вамможем предоставить.
окончательный выпуск
private void readData(MyCallback callback){
DocumentReference docRef = db.collection("following").document(currentUser.getUid());
docRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : Objects.requireNonNull(task.getResult())){
String group = document.getString("following");
followingList.add(group);
}
callback.onCallback(followingList);//says must be declared final
} else {
}
}
});
}