Идея такова: Вставляю список в БД, подписываюсь на вставку, при успешной вставке, возвращается список id вставленных элементов, по этому списку id прохожусь в цикле и получаю строки по id, записываю строки в массив. После этот массив хочу вывести в консоль.
Описание кода: При вызове метода insert из метода insertDatums(), хочу получить наблюдаемый список insertedDatas, т.к если просто получать список insertedDatas, он почему то пустой. Список insertedDatas не заполняется данными при запуске программы, но при отладке заполняется.. Как из метода subscribe вернуть заполненный список insertedDatas с типом Observable? Или есть другие решения?
class InspectionsImpl(fragment: Fragment, contextForInspections: Context) : Inspections {
var datum: Datum? = null
val repository: AlfaKndRepository = ViewModelProviders.of(fragment).get(AlfaKndViewModel::class.java).repository
var insertedDatas: MutableList<Datum>? = null
override fun insertDatums(): Observable<MutableList<Datum>> {
//хочу, что бы метод insert вернул заполенный insertedDatas с типом Observable
return insert(dataForInsert!!)
}
private fun insert(datasForInsert: List <Datum>): Observable <MutableList<Datum>> {
//вставляю список в БД
Observable.fromCallable { repository.insertList(datasForInsert) }
.subscribeOn(Schedulers.io())
.flatMapIterable { it.map { it.toInt() } }.toList()
//получаю список id вставленных строк
.subscribe({
for (it in it.iterator()){
//получаю из БД элементы по id
repository.getById(it)
//хочу записать строки полученные по id в массив insertedDatas, при отладке все записывается, а если запустить код, то массив пуст, поэтому хочу вернуть insertedDatas, как Observable
.subscribe({insertedDatas!!.add(it)}, {Log.d(TAG, it.message)})
}
@ЮрийСПб спасибо, так и сделал, мыслил по другому, хотел через цикл, когда проще было через map:
private fun insert(datasForInsert: List<Datum>): Single<MutableList<Datum>> {
return Observable.fromCallable { repository.insertList(datasForInsert) }
.subscribeOn(Schedulers.io())
//перебираем список
.flatMapIterable {
//элемент списка приобразовываем в Long
it.map {
it.toInt()
}
}
//объеденить выпущенные элементы из map в список
.toList()
.map {
it.toMutableList()
}
.map {
it.map {it ->
repository.getById(it)
}
}.map {
it.toMutableList()
}.flatMap {
Single.just(it)
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Например, при разработке и в процессе отладке java кода в idea можно проваливаться во внутреннюю реализацию пакетов и классов JDKЕсть ли что-то...
Интересует такой вопрос есть сайт на Yii2, как сделать так чтобы при клике в форме обратной связи на номер телефона, на клавиатуре телефона...