问题标签 [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 - SQLBrite 会自动关闭游标吗?
我怀疑 sqlbrite 是否会自动关闭光标,似乎它没有这样做,因为我不断得到:
java.lang.Throwable:在 android.database 的 android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:809) 的 dalvik.system.CloseGuard.open(CloseGuard.java:180) 未调用显式终止方法“关闭” .sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)
但我在文档中没有看到任何说明我应该明确调用cursor.close
.
编辑 1
这是给我光标未关闭错误的片段:
android - 通过可观察的 API 调用序列
嗨,我试图让两个 observable 依次被调用,一个接一个。我尝试使用合并,但它不尊重顺序,所以我去使用 concat 代替,主要问题是这两个 Observable 发出不同的类型。从我所看到的情况来看,zip
可能是合并两个不同的 observable 的一个选项,但我还没有完全理解它。
所以具体的问题是,如何一个接一个地调用顺序 API。目前这是我的实现
android - 带有 SqlBrite/SqlDelight(离线数据库)和 Retrofit(Http 请求)的存储库模式
我正在使用 SqlBrite/SqlDelight 在 RxJava 中实现存储库模式,用于离线数据存储和 Http 请求的改造
这是一个示例:
当前实现用于Observable.amb
获取最新的 2 个流并返回db
流,以防db
有数据或服务器。server
为了防止在没有互联网的情况下提前失败,请delaySubscription
使用200ms
.
我尝试使用Observable.concat
,但 SqlBrite 流从不调用onComplete
,因此server
永远不会触发可观察的。
我也尝试Observable.combineLatest
了哪个不起作用,因为它server
在发出任何东西之前一直等待 observable 返回数据并且Observable.switchOnNext
也不起作用。
我正在寻找的是一个存储库,它:
- 保持对 SqlBrite (DB) 的订阅处于打开状态,以防数据库更新
- 始终从服务器获取数据并将其写入数据库
- 如果数据库中没有任何内容并且网络请求仍在进行中,则不应发出空结果。这是因为用户应该在第一次加载的情况下看到一个进度条。
java - Rxjava2 方法类似于 BiFunction 的背压
我使用sqlbrite来监听表a和b的变化。并使用 combineLatest 运算符来组合 sqlbrite 生成的 observables。在 BiFunction 过程中发出 observableA 和 observableB 的项。
问题:如果 BiFunction 运行时间过长(例如 10 秒),比 observables 触发间隔长(例如 observables 每隔 1 秒触发一次),这将导致 BiFunction 做不必要的工作,因为我只需要最新发出的项目,但 BiFunction是一个一个处理发射的项目,所以BiFunction会处理旧的发射项目,我不需要处理它。我希望 BiFunction 在 BiFunction 中每个完成的 apply() 都跳过旧的发射项目并处理最新发射的项目,以减少资源浪费并节省时间。rxjava 是否有类似于 BiFunction 的背压的方法或其他解决此问题的方法?
该图显示了当前和预期的 BiFunction 时间线。图链接
我找到了两种方法来解决这个问题,但是有缺陷。
Method1:通过Pair将“aItems”和“bItems”组合起来,然后将引用传递给switchMap并处理job。
缺陷:switchMap 只向订阅者发送最新的项目,但仍然做不必要的工作。
方法2 :也结合“aItems”和“bItems”然后将引用传递给onNext并处理作业。
缺陷:阻塞了 UI 线程。
android - SQLBrite 中的一对多连接
假设我有三个 SQLite 表week
, day
, event
.
一个week
条目可以有多day
个子条目,而子条目又可以有多event
个子条目。
要获取具有关联孩子的整个week
实体以显示在 a 中,TableLayout
我通常会执行以下查询:
SELECT * FROM week JOIN day on week.id = day.week_id JOIN event on day.id = event.day_id WHERE week.id=foo
这将返回一个我可以轻松解析的游标。
SQLBrite 中这个流程的等价物是什么?
我必须将生成的 observable 映射db.createQuery
到其中一个mapToList
或mapToOne
哪个很难掌握。我尝试映射到一个,然后在订阅者中解析光标,但我得到一个光标有多行异常。映射到列表有点不自然,因为我只希望week
最后有一个条目。
我错过了什么?:) 谢谢!
android - 如何将 Android SqlBrite 模型类转换为实现 Parcelable
我正在构建一个应用程序,我在其中使用 SQLBrite sql 包装器进行所有数据库操作。此外,我正在使用 Auto Value 使用 Google AutoValue 库自动处理我的所有 getter 和 setter。
现在,我的问题是处理设备旋转并处理我的 putParcelable() 方法需要两个参数,其中第一个是 KEY,第二个是 Parcelable 类型的值。正如我之前所说,我的 Recipe 类(下面的代码)是一个 SQLBrite 实现的类,并且没有实现 Parcelable。我需要一些帮助来将其转换为实现 Parcelable 接口。
现在,我尝试转换上面的代码来实现 Parcelable 接口,但是,现在我的代码不起作用。请帮我转换这个类来实现 Parcelable 接口。
编辑:我将使用修改后的类来处理我的设备旋转,以将我的回收器视图的滚动状态保存在片段中。我的 onSaveInstanceState() 方法看起来像这样,
putParcelable 中的第二个参数是 Parcelable 类型。
我的 onCreateView() 方法如图所示:
任何帮助都会很棒,因为我在转换类以实现 Parcelable 接口时被卡住了。
android - 如何连接来自两个可观察对象的数据
我有两个可观察的:
我需要从 carObservable 获取汽车列表并将其放入 profileObservable(将汽车列表放入 Profile),内部方法如下:
android - Android 应用安装失败 [INSTALL_FAILED_DEXOPT] Android 2.3.x 设备
我有一个由多个模块组成的应用程序,我刚刚从 rxjava1 更新到 rxjava2。现在无法在 android 10 设备或模拟器上安装它。在编译时,没有错误,但从 android studio 或命令行安装失败。这是我的一些设置:
跑步 ./gradlew app:dependencies
我做了任何其他类似线程所说的一切,清理项目,删除构建文件夹,我什至在另一台计算机上开始了新的构建,所以以前安装的应用程序不可能在那里构建。
如果我删除 rxjava2 和 rxandroid2 依赖项并注释掉所有使用它们的代码,则应用程序安装正常。一旦我重新启用它们,我就会再次收到错误。在 studion 上,错误是:
当然,即使我知道该应用程序未安装并且它当然会失败,我也会说是。
我已经尝试过使用此工具的方法计数 https://github.com/KeepSafe/dexcount-gradle-plugin 方法仍然低于 64000 但即使我添加了 multidex,如下所述:https ://developer.android.com/studio/ build/multidex.html 但它仍然不起作用!我尝试过使用目标 SDK,增加到 25,甚至 buildtools 到 26,使用比以前更新的 gradle 包装器(目前我在 3.5),但没有,仍然是同样的问题。除了恢复到 rxjava1 之外,我不知道还能尝试什么,但我首先更新的原因是因为我有太多项目并且在 android 10 上获得了 OOME,所以在阅读了这篇https://github.com/ReactiveX /RxJava/wiki/什么's-different-in-2.0#which-type-to-use 我决定升级。它没有说 rxjava2 与 android 10 不兼容。应用程序在 android 19++ 上安装良好(在 10 和 19 之间没有尝试过)我已经尝试了来自https://github.com/square/sqlbrite的示例,我将其更改为与 api 10 一起使用,并且可以在 android 10 上正常安装。还有什么我可以尝试的想法吗?
更新:这些是来自模拟器的日志:
更新 2:我添加了 proguard,即使在尝试安装发布版本(使用 proguard)时仍然出现相同的错误
android - SQLBrite如何将参数传递给createQuery
我正在为我的聊天应用程序使用 sqlbrite。我需要观察一个数据库,但范围不固定。
我需要传入一个参数newestMessage.sentTime
,但是 latestMessage 会在新消息到来时不断更新。所以我不能只将电流newestMessage
作为参数传递。
android - 测试数据库存储库时出错 - SQLBrite、SQLDelight
测试我的数据库时,出现以下错误:
- SQLiteDiskIOException:磁盘 I/O 错误(HTC Desire 620)
- SQLiteReadOnlyDatabaseException:尝试写入只读数据库(Moto g2)
显然取决于我测试它的设备。运行应用程序时不会发生错误。不过,如果我无法测试应用程序,我的代码可能有问题。
该应用程序使用了两个库,它们应该可以很好地结合使用 SQLDelight 和 SQLBrite,这可能会使这个问题有些具体。
为了更好地理解正在发生的事情,我将对我的数据包中的文件进行简短描述。
文件Location
和Run
是 SQLDelight 生成的行模型。LocationManager
并RunManager
启用生成 sqlStatements 以从相应的表中插入或删除数据。下面看起来相似RunManager
。LocationMangager
MyDBHelper 以标准方式扩展了 SQLiteOpenHelper。
数据存储库聚合了各种插入和查询操作。
现在到问题的主要部分。现在,我编写了以下测试用例并遇到了顶部列出的错误。有趣的是,当我单独运行测试时,我没有收到任何错误,所有测试都通过了。
我认为这与从不同线程访问数据库有关,但我不知道如何解决这个问题。