почему я получаю пустой список в фрагменте Kotlin? - PullRequest
0 голосов
/ 23 января 2020

У меня есть фрагмент и список массивов. Я пытаюсь добавить значения в этот список массивов внутри функции. Когда я печатаю это внутри функции, это работает. Но, когда я пытаюсь распечатать его за пределами функции, список массивов становится пустым.

Я вижу, что мне здесь не хватает логики c.

Может кто-нибудь помочь мне, где я делаю неправильно?

вот файл фрагмента.

class HourlySalesFragment : Fragment() {

val tt = arrayListOf<Double>()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle? ): View? {

 //some other code here.

 val valueEventListener08_30 = object : ValueEventListener {


        var subtotalList = arrayListOf<Double>()


        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                for(ds in p0.children) {
                    println("data snapshot "+ds)

                    val subtotal = ds.child("subTotal").getValue(Double::class.java)!!

                    subtotalList.add(subtotal)
                    textSubTotal8_30.text = subtotalList.sum().toString()

                }

                tt.add(subtotalList.sum())
                println("ttt 8:30 "+tt)
            }
        }

        override fun onCancelled(databaseError: DatabaseError) {
            Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
        }
    }
    println("ttt outside"+tt)

и вот результат, который я получаю.

ttt outside[]
ttt 8:30 [5.0]

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

1 Ответ

3 голосов
/ 23 января 2020

Поскольку ваш оператор println ("ttt outside" + tt) выполняется первым, прежде чем асинхронный метод завершит свое выполнение.

val valueEventListener08_30 = object : ValueEventListener {


        var subtotalList = arrayListOf<Double>()


        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                for(ds in p0.children) {
                    println("data snapshot "+ds)

                    val subtotal = ds.child("subTotal").getValue(Double::class.java)!!

                    subtotalList.add(subtotal)
                    textSubTotal8_30.text = subtotalList.sum().toString()

                }

                tt.add(subtotalList.sum())
                println("ttt 8:30 "+tt)
                useArray()
            }
        }

        override fun onCancelled(databaseError: DatabaseError) {
            Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
        }
    }




   fun useArray(){
        println("ttt outside"+tt)

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