Когда я использую sqlbrite, я не могу использовать функцию rxjava toList() после использования groupBy(). Вот мой код:Использование функций groupBy и toList rxjava с sqlbrite
QueryObservable query = jetAnywhereDB.createQuery(Item.TABLE, "SELECT * FROM testTable");
query.flatMap(q -> {
return q.asRows(Item.MAPPER);
}).
groupBy(item -> {
return Character.toUpperCase(item.name.charAt(0));
}).
subscribe(groupedObservable -> {
groupedObservable.subscribe(item -> {
Log.d("test", groupedObservable.getKey() + ": " + item.name);
});
});
Это прекрасно работает и записывает все детали, как они получают излучается, но если я изменить его
groupedObservable.toList().subscribe(items -> {
Log.d("test", groupedObservable.getKey() + ": " + items);
});
ли я не использовать ToList() правильно? Может ли это быть из-за того, что поток sqlbrite не заканчивается, поэтому rxjava ждет, пока больше элементов не испустит, прежде чем завершить toList()?
Так что, похоже, onComplete никогда не вызывается для sqlbrite (https://github.com/square/sqlbrite/issues/36). Есть ли способ использовать groupBy в этом случае? –
Если вы используете 'groupBy', тогда да, но' toList' не будет работать. Вы должны остановить источник либо с помощью 'timeout()', либо с помощью time-bound 'buffer()' вместо 'toList'. – akarnokd
Должен быть принят ответ. Горячая холодная вещь иногда бывает болезненной –