旧值在For Each循环中重复

时间:2019-06-01 10:52:52

标签: android firebase kotlin google-cloud-firestore

我正在从Firebase获取价值。但是,当我尝试在数组中添加值时,会重复出现以前的问题。谁能告诉我如何将值放入Array中。我想在recyclerview中显示这些值。

代码:

    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 个答案:

答案 0 :(得分:1)

您必须先清除ForEach循环booksArray,然后再添加新值。 因为当您添加新值时,它将作为数组中的下一项添加。

在使用booksArray.add(book)的位置添加新值之前,请使用booksArray.clear()

将此var booksArray = arrayListOf<Book>()替换为var booksArray = ArrayList<Book>()

答案 1 :(得分:0)

在主类中(列表添加):-

(您的名字).add(新的您的名字(您的值));

在PoJo课中:- 创建构造函数:-

-> public constructorName(String s){(您的值)= s; }

注意:-yourpojoname == constructorName