Запрос данных Firestore и добавьте одно поле ко всем документам, которые соответствуют запросу - PullRequest
0 голосов
/ 18 октября 2018

Я создаю приложение для Android, чтобы продавать книги.Мои пользователи могут размещать рекламу своих подержанных книг и продавать их.Я планирую добавить функцию, по которой мои пользователи могут выбрать анонимность.Там будет флажок с именем Make me anonymous.Если пользователи установят этот флажок, их телефонный номер и имя не будут видны другим.Должно быть видно только общее имя.

Теперь проблема в том, что я хочу добавить запись anonymous = true в каждый рекламный документ, который загружен пользователем.

Я хочу запросить объявления, которыепользователь поставил и добавил поле anonymous = true.Я хочу сделать что-то вроде ниже:

 final CheckBox anonymousCB = findViewById(R.id.anonymousCB);
    anonymousCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (anonymousCB.isChecked()){
                WriteBatch batch = firestore.batch();
                DocumentReference sfRef = firestore.collection("books").whereEqualTo(uid,uid);
                batch.update(sfRef, "anonymous", "true");
            }
        }
    });

Но я не могу сделать запрос и вставить поле во все документы, которые соответствуют запросу.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 20 октября 2018

Есть ли лучший способ сделать это?

Да, есть.Чтобы решить эту проблему, используйте следующие строки кода внутри метода onCheckedChanged():

Query sfRef = firestore.collection("books").whereEqualTo(uid, uid);
sfRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (DocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }

            for (String id : list) {
                firestore.collection("books").document(id).update("anonymous", true).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "anonymous field successfully updated!");
                    }
                });
            }
        }
    }
});

Результатом этого кода будет добавление свойства anonymous ко всем вашим book объектам и установка егодо true.Обратите внимание, что я использовал логические true и , а не String true, как вы использовали в своем коде.Удобнее использовать таким способом.

PS Если вы используете класс модели для своих книг, пожалуйста, также посмотрите мой ответ из этой записи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...