Как получить массив из класса в kotlin? - PullRequest
0 голосов
/ 03 апреля 2020

Я использую firestore в android studio для выполнения запросов. Когда я выполняю запрос в той же операции, он возвращает запрос без проблем, но когда я отделяю этот запрос и делаю его из класса, он становится пустым

Пользовательский класс, я делаю запрос отсюда, он получает их, но возвращает пустое:

class User (var userId:String){
    private val db = FirebaseFirestore.getInstance()
    var userProductsRef =  db.collection("User").document(userId)
        .collection("Products")

    //I have no idea why it does not send from the class, or why they arrive empty, I will pass the code
    //to mainActivity
    fun getProduct():ArrayList<Product> {
        var listItems = arrayListOf<Product>()

        userProductsRef.get().addOnSuccessListener { documents ->
            for(document in documents){
                listItems.add(document.toObject(Product::class.java))

                //With this you confirm that it brings the objects from firestore
                Log.w("ProductName", "Name: ${document.toObject(Product::class.java).name}")
            }
            Log.w("id", "Name: ${userId}")
        }.addOnFailureListener { exception ->
            Log.w("Error", "e: ", exception)
        }

        Log.w("List", "List User: ${listItems}")
        return listItems
    }
}

Класс продукта

class Product (var name:String = "", var price: Double=0.0, var created_at: Timestamp= Timestamp.now())

Запрос от mainActivity

private fun listView() {
        var userCollection = db.collection("User")

        val listItems = arrayListOf<Product>()


        userCollection.get().addOnSuccessListener { documents ->
            for (document in documents){
                var userProductsRef =  db.collection("User").document(document.id)
                    .collection("Products")

                //This is the query that does not bring me anything from the user class, here if it works
                userProductsRef.get().addOnSuccessListener { documents ->
                    for(document in documents){
                        listItems.add(document.toObject(Product::class.java))
                        Log.w("ProductName", "Name: ${document.toObject(Product::class.java).name}")
                    }
                    val adapter = ProductAdapter(this, listItems)
                    listProducts.adapter = adapter
                    Log.w("ProductList", "Name: ${listItems}")
                }.addOnFailureListener { exception ->
                    Log.w("Error", "e: ", exception)
                }
            }
        }.addOnFailureListener { exception ->
            Log.w("Error", "Error getting documents: ", exception)
        }


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