Size: a a a

Android Developers

2020 March 07

TT

Turalllb Turalll in Android Developers
Подскажите, а мы можем в SQLiteOpenHelper работать с двумя разными базами?
источник

VM

Viktor Mikhaylov in Android Developers
Ребята, привет. Надеюсь, кто-нибудь прочитает эту простыню и поможет мне, вы моя последняя надежда, сижу уже 2 дня.
Мне нужно заполнить выпадающий список, используя Room и RxJava и MVVM.

ViewModel фрагмента выглядит так:
fun getData(): Single<List<Kotlin>> {
       return dataSource.getAll()
   }

В фрагменте делаю так:
private fun prepareDataList() {
       viewModel.getData()
           .subscribeOn(Schedulers.io())
           .observeOn(AndroidSchedulers.mainThread())
           .subscribe(object : SingleObserver<List<Kotlin>> {
               override fun onSuccess(t: List<Kotlin>) {
                   kotlinDataList = t
               }
               override fun onSubscribe(d: Disposable) {}
               override fun onError(e: Throwable) {}
           })
   }

kotlinDataList должен заполнится данными, далее я их рассовываю по вьюхе выпадающего списка.
Проблема в том, что лист ВНЕ onSuccess всегда пустой, данные генерируются внутри onSuccess, но не выходят наружу.
При дебагинге данные не выходят наружу и в конце бесконечно горит "application is running".
Я все перегуглил, испробовал и всякие Flowable, Maybe и еще кучу приемов, пересмотрел все примеры, которые нашел в гугле, не могу понять, что у меня не так.
источник

M

Mikhail in Android Developers
что значит "не выходят наружу"? ты после prepareDataList() запускаешь ещё какой-то код который делает что-то со списком?
источник

AO

Artem Osipov in Android Developers
Viktor Mikhaylov
Ребята, привет. Надеюсь, кто-нибудь прочитает эту простыню и поможет мне, вы моя последняя надежда, сижу уже 2 дня.
Мне нужно заполнить выпадающий список, используя Room и RxJava и MVVM.

ViewModel фрагмента выглядит так:
fun getData(): Single<List<Kotlin>> {
       return dataSource.getAll()
   }

В фрагменте делаю так:
private fun prepareDataList() {
       viewModel.getData()
           .subscribeOn(Schedulers.io())
           .observeOn(AndroidSchedulers.mainThread())
           .subscribe(object : SingleObserver<List<Kotlin>> {
               override fun onSuccess(t: List<Kotlin>) {
                   kotlinDataList = t
               }
               override fun onSubscribe(d: Disposable) {}
               override fun onError(e: Throwable) {}
           })
   }

kotlinDataList должен заполнится данными, далее я их рассовываю по вьюхе выпадающего списка.
Проблема в том, что лист ВНЕ onSuccess всегда пустой, данные генерируются внутри onSuccess, но не выходят наружу.
При дебагинге данные не выходят наружу и в конце бесконечно горит "application is running".
Я все перегуглил, испробовал и всякие Flowable, Maybe и еще кучу приемов, пересмотрел все примеры, которые нашел в гугле, не могу понять, что у меня не так.
А где лист не пустой?
источник

VM

Viktor Mikhaylov in Android Developers
Artem Osipov
А где лист не пустой?
внутри onSuccess он не пустой
источник

AO

Artem Osipov in Android Developers
Viktor Mikhaylov
внутри onSuccess он не пустой
И ты его присваиваешь внешней переменной?
источник

VM

Viktor Mikhaylov in Android Developers
Mikhail
что значит "не выходят наружу"? ты после prepareDataList() запускаешь ещё какой-то код который делает что-то со списком?
да, потом идет метод:
private fun prepareDataForExpListView(kotlinDataList: List<Kotlin>) {
       kotlinDataList.forEach {
           dataList[it.question] = listOf(it.answer)
       }
   }
источник

AO

Artem Osipov in Android Developers
А где ты ее проверяешь потом?
источник

AO

Artem Osipov in Android Developers
Viktor Mikhaylov
да, потом идет метод:
private fun prepareDataForExpListView(kotlinDataList: List<Kotlin>) {
       kotlinDataList.forEach {
           dataList[it.question] = listOf(it.answer)
       }
   }
Где вызов этого метода в onSuccess? Откуда что-то узнает что данные появились?
источник

VM

Viktor Mikhaylov in Android Developers
Artem Osipov
И ты его присваиваешь внешней переменной?
да, private var kotlinDataList: List<Kotlin> = mutableListOf() - внешняя переменная, в onSuccess пытаюсь его заполнить t, но внешний лист никогда не заполняется, все только внутри происходит и так и остается, потом приложение просто в ожидании...
источник

M

Mikhail in Android Developers
onSuccess исполняется асинхронно, т.е. после запуска prepareDataList() он не будет исполнен, а будет только запущено исполнение всей цепочки, которая через некоторое время приведёт к вызову onSuccess
источник

M

Mikhail in Android Developers
соответственно ты изнутри onSuccess должен вызывать всё что тебе нужно сделать с данными после их прихода
источник

VM

Viktor Mikhaylov in Android Developers
Mikhail
onSuccess исполняется асинхронно, т.е. после запуска prepareDataList() он не будет исполнен, а будет только запущено исполнение всей цепочки, которая через некоторое время приведёт к вызову onSuccess
т.е. один вызов уходит в onSuccess, а основной поток идет дальше, и поэтому лист всегда пустой? Как тогда мне дождаться получения данных и только тогда заполнить лист?
источник

M

Mikhail in Android Developers
Viktor Mikhaylov
т.е. один вызов уходит в onSuccess, а основной поток идет дальше, и поэтому лист всегда пустой? Как тогда мне дождаться получения данных и только тогда заполнить лист?
ну у тебя же в onSuccess данные уже есть, ты там можешь и заполнить список собственно
источник

VM

Viktor Mikhaylov in Android Developers
Mikhail
ну у тебя же в onSuccess данные уже есть, ты там можешь и заполнить список собственно
нет, так тоже не работает, я уже все перепробавал...
override fun onSuccess(t: List<Kotlin>) {
                   kotlinDataList.forEach {
                       dataList[it.question] = listOf(it.answer)
                   }
               }
источник

AD

Adel Dolgov in Android Developers
Всем доброго времени суток. Имеется фрагмент, внутри него фрагмент с BottomSheet, а внутри BottomSheet ещё один фрагмент. Какой самый оптимальный способ передать данные из последнего фрагмента в самый родительский?
источник

VM

Viktor Mikhaylov in Android Developers
Viktor Mikhaylov
нет, так тоже не работает, я уже все перепробавал...
override fun onSuccess(t: List<Kotlin>) {
                   kotlinDataList.forEach {
                       dataList[it.question] = listOf(it.answer)
                   }
               }
dataList[it.question] = listOf(it.answer) - это HashMap, если что
источник

k

k1ceargy in Android Developers
Зачем нужен котлин, когда есть православный джава, к тому же и оригинальный?
источник

M

Mikhail in Android Developers
Viktor Mikhaylov
нет, так тоже не работает, я уже все перепробавал...
override fun onSuccess(t: List<Kotlin>) {
                   kotlinDataList.forEach {
                       dataList[it.question] = listOf(it.answer)
                   }
               }
ну не похоже что этот метод как-то манипулирует ListView/RecyclerView или что у тебя там
источник

k

k1ceargy in Android Developers
Просто взяли синтаксис изменили jetbrains в котлине, и как новый язык приподносят
источник