У меня есть база данных Firestore, как это:
Я хочу получить доступ к каждой из данных различных симптомов, то есть "Anxiety_data" и ее дочерним элементам, которыесостоит из меток времени, а затем словаря и поместите их в RecyclerView
, используя FirebaseUI
FirebaseRecyclerViewAdapter
У меня есть этот класс модели:
public class EntryDataModel {
private String timestamp, symptom, severity, comment;
public EntryDataModel() {}
public EntryDataModel(String timestamp, String symptom, String severity, String comment) {
this.timestamp = timestamp;
this.symptom = symptom;
this.severity = severity;
this.comment = comment;
}
public String getTimestamp() {return timestamp;}
public String getSymptom() {return symptom;}
public String getSeverity() {return severity;}
public String getComment() {return comment;}
}
Вот мой Query
:
Query query = db.collection("users").document(user_id).collection("symptom_data");
Вот Firebase RecyclerView Adapter
:
void fireStoreRecyclerAdapterSetup() {
FirestoreRecyclerOptions<EntryDataModel> options = new FirestoreRecyclerOptions.Builder<EntryDataModel>()
.setQuery(query, EntryDataModel.class)
.build();
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<EntryDataModel, EntryDataHolder>(options) {
@Override
public void onBindViewHolder(EntryDataHolder holder, int position, EntryDataModel model) {
// Bind the Chat object to the ChatHolder
// ...
System.out.println("Query: " + query.toString());
}
@Override
public EntryDataHolder onCreateViewHolder(ViewGroup group, int i) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(group.getContext())
.inflate(R.layout.entry_data_recyclerview_item, group, false);
return new EntryDataHolder(view);
}
};
recyclerView.setAdapter(adapter);
adapter.startListening();
}
}
Я не уверен, как мне настроить это так, чтобы я брал все массивы меток времени от каждого из симптомовполя данных, и соберите их все вместе в список, который я могу использовать для recyclerView
.
. Возможно, я не могу использовать адаптер FirebaseUI Recycler, или мне нужно сначала пройтись по каждому полю симптомов и создать + добавитьсписок?Надеюсь, у меня есть четкое представление о том, что я хотел бы сделать. Спасибо.
РЕДАКТИРОВАТЬ: Я сделал это на iOS, вот результат, который я хочу:
РЕДАКТИРОВАТЬ: я добавил это, получая имена каждого отдельного документа, а затем, когда у меня есть это в цикле for, я сейчас пытаюсь получить значения Array и добавить это к EntryDataModel
список, тогда я могу использовать свой собственный адаптер:
РЕДАКТИРОВАТЬ: Это работает, я получаю необходимые данные, из каждого документа.Теперь мне просто нужно иметь возможность перебирать поля и временные метки и использовать мою модель для создания списка.Как я могу это сделать?Log.d("example", "DocumentSnapshot data: " + document.getData());
это печатает: D/example: DocumentSnapshot data: {1558879769={severity=Mild, symptom=Anxiety, comment=Mild anxiety at work., timestamp=1558879769}, 1558879745={severity=Mild, symptom=Anxiety, comment=Feeling relaxed watching TV., timestamp=1558879745}, 1558879710={severity=Moderate, symptom=Anxiety, comment=Walking the cat., timestamp=1558879710}, 1558879827={severity=Moderate, symptom=Anxiety, comment=Taking the cat for a walk., timestamp=1558879827}, 1558888729={severity=Mild, symptom=Anxiety, comment=The cat is fed up with walking., timestamp=1558888729}}
Теперь мне просто нужно получить каждый массив меток времени и добавить их в отдельный список, а затем я могу сделать это для каждого документа и получить полный список всех массивов меток времени.
void getSymptomData() {
final CollectionReference colRef = db.collection("users").document(user_id).collection("symptom_data");
colRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
DocumentReference docRef = colRef.document(document.getId());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d("Iteration", "DocumentSnapshot data: " + document.getData());
} else {
Log.d("NoDoc", "No such document");
}
} else {
Log.d("Failed", "get failed with ", task.getException());
}
}
});
}
Log.d("listylist", list.toString());
} else {
Log.d("tag", "Error getting documents: ", task.getException());
}
}
});
}