问题标签 [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.

0 投票
1 回答
221 浏览

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

这是给我光标未关闭错误的片段:

0 投票
1 回答
263 浏览

android - 通过可观察的 API 调用序列

嗨,我试图让两个 observable 依次被调用,一个接一个。我尝试使用合并,但它不尊重顺序,所以我去使用 concat 代替,主要问题是这两个 Observable 发出不同的类型。从我所看到的情况来看,zip可能是合并两个不同的 observable 的一个选项,但我还没有完全理解它。

所以具体的问题是,如何一个接一个地调用顺序 API。目前这是我的实现

0 投票
2 回答
786 浏览

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) 的订阅处于打开状态,以防数据库更新
  • 始终从服务器获取数据并将其写入数据库
  • 如果数据库中没有任何内容并且网络请求仍在进行中,则不应发出空结果。这是因为用户应该在第一次加载的情况下看到一个进度条。
0 投票
1 回答
538 浏览

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 线程。

0 投票
0 回答
126 浏览

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到其中一个mapToListmapToOne哪个很难掌握。我尝试映射到一个,然后在订阅者中解析光标,但我得到一个光标有多行异常。映射到列表有点不自然,因为我只希望week最后有一个条目。

我错过了什么?:) 谢谢!

0 投票
1 回答
71 浏览

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 接口时被卡住了。

0 投票
1 回答
269 浏览

android - 如何连接来自两个可观察对象的数据

我有两个可观察的:

我需要从 carObservable 获取汽车列表并将其放入 profileObservable(将汽车列表放入 Profile),内部方法如下:

0 投票
1 回答
199 浏览

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)时仍然出现相同的错误

0 投票
1 回答
78 浏览

android - SQLBrite如何将参数传递给createQuery

我正在为我的聊天应用程序使用 sqlbrite。我需要观察一个数据库,但范围不固定。

我需要传入一个参数newestMessage.sentTime,但是 latestMessage 会在新消息到来时不断更新。所以我不能只将电流newestMessage作为参数传递。

0 投票
1 回答
260 浏览

android - 测试数据库存储库时出错 - SQLBrite、SQLDelight

测试我的数据库时,出现以下错误:

  • SQLiteDiskIOException:磁盘 I/O 错误(HTC Desire 620)
  • SQLiteReadOnlyDatabaseException:尝试写入只读数据库(Moto g2)

显然取决于我测试它的设备。运行应用程序时不会发生错误。不过,如果我无法测试应用程序,我的代码可能有问题。

该应用程序使用了两个库,它们应该可以很好地结合使用 SQLDelight 和 SQLBrite,这可能会使这个问题有些具体。

为了更好地理解正在发生的事情,我将对我的数据包中的文件进行简短描述。

文件LocationRun是 SQLDelight 生成的行模型。LocationManagerRunManager启用生成 sqlStatements 以从相应的表中插入或删除数据。下面看起来相似RunManagerLocationMangager

MyDBHelper 以标准方式扩展了 SQLiteOpenHelper。

数据存储库聚合了各种插入和查询操作。

现在到问题的主要部分。现在,我编写了以下测试用例并遇到了顶部列出的错误。有趣的是,当我单独运行测试时,我没有收到任何错误,所有测试都通过了。

我认为这与从不同线程访问数据库有关,但我不知道如何解决这个问题。