Итак, я работаю над приложением Android, и я пытаюсь увеличить значение поля на 1 нажатием кнопки. По сути, у меня есть коллекция пользователей, у каждого из которых есть подколлекция постов, у каждого поста есть поле нумерации c, называемое «кандидаты», которое я использую, чтобы подсчитать, сколько человек подали заявки на работу.
Проблема в том, что я не могу найти способ запроса точного поля документа, потому что я не могу получить идентификатор документа программно. Я пытался определить пост, ища его название, но не повезло. Когда я запускаю код, он не выдает никакой ошибки, приложение не создает sh, но, тем не менее, в моей базе данных ничего не меняется.
Это моя структура базы данных:
public void executeTransaction(int position){
db.runTransaction(new Transaction.Function<Void>() {
@Nullable
@Override
public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {
db.collectionGroup("posts").whereEqualTo("title", list.get(position).getTheTitle()).get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
DocumentReference postRef = usersRef.document("posts");
DocumentSnapshot postSnapshot = null;
try {
postSnapshot = transaction.get(postRef);
} catch (FirebaseFirestoreException e) {
e.printStackTrace();
}
long newApplicants = postSnapshot.getLong("applicants") + 1;
transaction.update(postRef, "applicants", newApplicants);
}
});
return null;
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(context, "You have applied to this job!", Toast.LENGTH_SHORT).show();
}
});
Этот метод запускается при нажатии кнопки «Применить». Аргумент 'position' - это просто позиция, в которой сообщение хранится в локальном ArrayList<Post> list
.
Как я могу просто увеличить значение applicants
сообщения?