- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我使用sqlbrite时,使用groupBy()后无法使用rxjava函数toList()。这是我的代码:
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() 之前等待更多的项目发出?
最佳答案
groupBy
是一种特殊的运算符,需要您订阅返回的 GroupedObservable
否则它不会请求更多数据并会挂起。在您的第一个示例中,您执行此操作,但在第二个示例中,您开始累积组而不订阅它们。
您可以做的是 flatMap
将组连接到一对键和列表中,这样它就不会挂起:
.groupBy(t -> ...)
.flatMap(g -> g.toList().map(lst -> Pair.of(g.getKey(), lst)))
.subscribe(...)
我不熟悉 SQLBrite 但它确实是一个应用了 toList
的非完成源将永远不会发出任何东西(无论是否有 groupBy
或不是)。
关于android - 将 groupBy 和 toList rxjava 函数与 sqlbrite 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33229556/
我怀疑 sqlbrite 是否会自动关闭游标,似乎它没有这样做,因为我不断得到: java.lang.Throwable: Explicit termination method 'close' no
我对 rxAndroid/rxJava 还是有些陌生,所以我在思考这个问题以及我是否正确地做所有事情时遇到了一些麻烦。 我正在使用 SqlBrite 使用从 Cursor 返回的行更新 Recycle
这是我的用例: 我正在开发一个应用程序,它通过 REST API 与服务器通信,并将接收到的数据存储在 SQLite 数据库中(将其用作某种缓存)。 当用户打开屏幕时,必须发生以下情况: 数据从数据库
我开始结合使用 RxJava 和 SqlBrite我在使用 zip 时遇到了一些问题运营商。 假设我有 2 个类,User和 Tweet . public class User { publi
1) 我有方法 Observable> moviesWithoutGenres() 返回电影列表但电影的流派字段为空 2) 我有方法 Observable> movieGenres(Movie m)
在我的聊天应用程序中,我使用 SQLBrite 包装器从本地数据库更新聊天。目前我的 Activity 同时拥有 UI 和 SQLBrite。现在我想将 SQLBrite 逻辑提取到外部类。因此,当我
当我使用sqlbrite时,使用groupBy()后无法使用rxjava函数toList()。这是我的代码: QueryObservable query = jetAnywhereDB.createQ
我正在使用 SqlBrite/SqlDelight 在 RxJava 中实现存储库模式,用于离线数据存储和 Http 请求改造 这是一个示例: protected Observable> getIte
我是一名优秀的程序员,十分优秀!