问题标签 [sqlbrite]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 连接不同类型的 observables
我想连接不同的可观察对象来创建活动流,使用 SQLBrite 将信息持久保存到我的 android sqlite 数据库中
此流程必须遵循以下活动顺序:
1 - 创建一个负责打开事务实例的可观察对象
2 - 连接多个可观察对象,每个对象负责将数据插入表中(每个表一个可观察对象)
3.a - 如果每个数据都被插入(doOnCompleted 方法),记录这个并将我的事务实例设置为成功
3.b - 如果有错误,记录这个错误(doOnError 方法)
4 - 关闭我的事务实例(doOnTeminate 方法)
问题:
doOnError、doOnCompleted 和 doOnTerminate 等方法不会将我的事务实例作为参数发送。有办法做到这一点吗?
android - 可以从 Android SQLiteConstraintException 获取特定的错误详细信息吗?
对于某些数据,我收到以下错误,并且概念很清楚:
但是,这并不能帮助我找到哪个特定记录具有无效的 FK。与其修改我的代码并尝试使用新事务隔离每个插入,有什么方法可以打开(或提取)记录有用的详细信息,例如有问题的表,甚至是导致问题的 FK 值?
另外,我正在使用 SqlBrite,并已打开调试日志记录(仅记录操作,我仍然没有获得有关错误的更多信息)
更新: 这是我自己的代码上面的所有logcat;本质上,在尝试关闭之前打开的事务 (BriteDatabase.Transaction) 时捕获了异常(BriteDatabase.Transaction 对象是新增的;我刚刚从 SqlBrite 0.1.0 迁移到 0.4.1)。
android - 触发 SqlBrite 从 Stetho 调试桥更新
我使用 SqlBrite 进行响应式数据库更新,使用 Stetho 进行调试。通过 stetho,我可以从 SQL 控制台向数据库中插入一个新行。有什么方法可以让我手动插入这一行以触发 SqlBrite 更新我的 UI?
android - 工作线程上的 SqlBrite 查询
我对 rxAndroid/rxJava 还是有点陌生,所以我在思考这个问题以及我是否正确地做所有事情时遇到了一些麻烦。
我正在使用 SqlBrite 使用从游标返回的行来更新 RecyclerView。当对表执行 db 操作时,下面的 observable 负责重新查询数据。我想返回一个 CursorWrapper (ChecklistCursor),但想确保我在工作线程上运行 select * 查询。checklistRecyclerAdapter 订阅 ChecklistCursor observable,负责管理游标。
下面的代码似乎是我能够让 query.run() 在工作线程上运行并在主线程上返回订阅的唯一方法。
我想它有效,但我不相信这将是执行此操作的标准方法。谁能提供比两次使用 observeOn 更好的方法?
rx-java - 如何使用 rxjava 处理多个数据源?
情况是这样的:
我有域层为业务逻辑提供数据获取接口,我有 2 个数据源:本地数据库和远程网络。
它是这样工作的:
- 请求所有用户:
DataRepository.getInstance().getUsers();
- 在 DataRepository 中,有 2 个来源:
LocalDataSource.getUsers()
它从本地数据库中获取所有用户,如果没有数据则忽略此请求。RemoteDataSource.getUsers()
它从我们的服务器请求最新的用户列表(即使本地数据库中有数据,为了保持数据更新),当请求数据时,将其保存或更新到本地数据库并发回结果。
我知道我可以通过以下方式实现我的目标DataRepository
:
现在想想我已经在项目中使用了 rxjava,为什么不使用 SqlBrite 和 Retrofit2 RxAdapters 来做这件事更方便呢?所以LocalDataSource.getUsers()
现在返回Observable<List<User>>
,所以返回RemoteDataSource.getUsers()
。
本地数据源.java
远程数据源.java
问题:
我应该怎么做DataRepository.getUsers()
才能实现与旧技巧相同的效果?
java - 结合两个 observables 而不使用 toList() 因为 SQLBrite 在引擎盖下
1)我有方法 Observable> moviesWithoutGenres() 返回电影列表但电影的流派字段为空
2) 我有方法 Observable> movieGenres(Movie m) 返回指定字段的流派列表
我需要实现应该返回 Observable> 的方法,并且列表中的每部电影都有流派列表。
我已经实现了这样的流,但我的解决方案是使用 Observable.from() 对 Observable 进行转换,而不是使用 toList() 运算符对 Observable> 进行转换。这个解决方案是不可接受的,因为我在第一种方法的引擎盖下使用 SQLBrite 包装器进行反应性 sql 查询。onCompleted 不会被调用,因为流始终保持打开状态,以便对 sql 表的更改可以传播到所有订阅者。因此,无法执行 toList 运算符。
1)Observable<List<Movie>> moviesWithoutGenres();
2)Observable<List<String>> movieGenres(Movie m);
应执行:
Observable<List<Movie>> movies();
android - 使用 SqlBrite 和 Retrofit 的 RxJava 数据流
在我的 Android 应用程序中,我使用的是域级别的存储库接口,该接口由使用 SqlBrite 实现的本地数据库和带有 Retrofit 可观察对象的网络 api 支持。所以我getDomains(): Observable<List<Domain>>
在 Repository 中有方法,在我的 Retrofit 和 SqlBrite 中有两个相应的方法。我不想连接或合并,或将这两个 observables 放在一起。我希望我的存储库只从 SqlBrite 获取数据,并且由于 SqlBrite 返回 QueryObservable,它在onNext()
每次底层数据更改时触发,我可以独立运行我的网络请求并将结果存储到 SqlBrite 并使用从网络获取并存储到数据库数据来更新我的 Observable . 所以我尝试实现我的存储库的getDomains()
方法如下:
但是在这种情况下,每次客户端应该订阅,每次它都会发出网络请求,那就不太好了。我考虑过其他do...
操作员将请求移到那里,但是doOnCompleted()
如果 QueryObservable 永远不会被调用,直到我在toBlocking()
某个地方调用,我不会这样做,doOnEach()
也不好,因为它每次从数据库中提取项目时都会发出请求。我也尝试使用replay()
运算符,但尽管在这种情况下缓存了 Observable,但订阅会发生并导致网络请求。那么,如何以期望的方式组合这两个 Observable 呢?
android - 使用 sqldelight 为 getter 和 setter 加前缀
是否可以将 sqldelight 配置为所有 getter 和 setter 的前缀?
酒吧() - > 获取酒吧()
android - 为什么选择 SQLBRITE 以及为什么我们使用它而不是 SQLite?
我是 android 到 SQL Brite 的新手。我需要了解 SQLBrite 如何使用以及为什么要使用它。我在 google 中搜索过,但没有太多解释,只有一些很难理解的 GitHub 代码。
有人请解释一下 SQLBrite 吗?
android - 为什么在使用 toList 时没有调用 onNext?
onNext
使用 RxJava 运算符时,我遇到了没有被调用的问题toList
。toList
在被调用之前,一切都完全按照我的预期工作。我在这里、这里和这里读到的东西似乎表明了onCompleted
没有被调用的问题,但我还是 RxJava 的新手,所以我不确定我需要在哪里调用它才能让它工作。
最令人困惑的是,我试图从谷歌的 Android 架构中遵循的架构似乎没有调用onCompleted
,它工作得很好。