Старые значения дублируются в Для каждого цикла - PullRequest
1 голос
/ 01 июня 2019

Я получаю значения от Firebase.Но проблема возникает, когда я пытаюсь добавить значения в массив, предыдущие значения повторяются.Может кто-нибудь сказать мне, как я могу положить значения в массиве.я хочу показать эти значения в программе повторного просмотра.

Код:

    bookCollection
            .get().addOnSuccessListener {
                booksSnapshot->
                if (!booksSnapshot.isEmpty){
                    var booksArray = arrayListOf<Book>()
                    for (bookSnapshot in booksSnapshot.documents){
                        val hashmap = bookSnapshot.data
                        hashmap?.put("id", bookSnapshot.id)
                        bookCollection.document(bookSnapshot.id).collection("pages")
                                .get().addOnSuccessListener {
                                    pagesSnapshot->
                                    hashmap?.put("page_count", pagesSnapshot.documents.size)
                                    val bookData = Gson().toJson(hashmap)
                                    val book = Gson().fromJson<Book>(bookData, Book::class.java)
                                    booksArray.add(book)
                                }

                    }
                }
            }

Журнал для массива:

E/books: [co.myapp.myapplication.Book@d6f7f62]
E/books: [co.myapp.myapplication.Book@d6f7f62, co.syntags.myapplication.Book@93c49b0]

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Вы должны очистить цикл ForEach booksArray перед добавлением новых значений. Потому что, когда вы добавляете новые значения, которые добавляются в качестве следующих элементов в вашем массиве.

Использовать booksArray.clear() Перед добавлением новых значений, где вы используете booksArray.add (book)

Заменить var booksArray = arrayListOf<Book>() на var booksArray = ArrayList<Book>()

0 голосов
/ 01 июня 2019

в основном классе (добавление в список): -

(имя вашего списка) .add (новое ваше имя_почты (ваше значение));

в классе PoJo: - создание конструктора: -

-> public constructorName (String s) {(Ваше значение) = s;}

примечание: - yourpojoname == constructorName

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