Я новичок в Firestore и изучаю Android. Проблема, с которой я сталкиваюсь, заключается в структурировании кода. Ниже приведен мой вариант использования:
- Пользователь хочет добавить новую заметку, вводит заголовок заметки
- Я хочу проверить, существует ли какая-либо другая заметка с таким же названием
- Если да, то не разрешать, иначе создать
Раньше это было легко с SQLite. Я мог бы просто выполнить запрос, чтобы получить данные в списке, проверить список и действовать соответствующим образом.
// BEFORE
private boolean fnValidate() {
// some code...
// run Sqlite query and get data in a list or something
// check if exists, return accordingly
}
// NOW
private boolean fnValidate() {
// some code...
notesRef.get().addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot s : queryDocumentSnapshots) {
// add data to list or something
}
// 'exists logic' will go here??
}).addOnFailureListener(e -> {
// show error
});
// I want 'exists logic' here like it was earlier so that I can properly return true/false
}
Теперь, как вы можете видеть, это не будет работать последовательно. Он запустит задачу, чтобы получить заметки, и продолжит. Поэтому мне нужно добавить свой exists logic
в OnSuccessListener
.
Кроме того, в будущем, если мне придется проверять какое-либо другое значение перед моим exists logic
, мне снова придется перемещаться exists logic
в пределах этого условия OnSuccessListener
и так далее.
Кроме того, откуда вернуть значение true / false первоначальному вызывающему объекту fnValidate
?
Может быть, я упускаю что-то очевидное здесь, но я очень смущен тем, как идеальная структура должна быть. Пожалуйста, скажите мне, каковы лучшие практики здесь.