[英]RxJava2 and Room with loop
我有一个程序,其中数据使用 Room 存储在本地数据库中,我通过 RxJava2 接收数据。 在 Provider 中,数据库创建了一种方法,该方法采用一个参数 - 标识符,通过该方法它发送请求并接收与标识符相对应的某些数据。 但我想作为参数传递的不是一个标识符,而是一个标识符数组并获得一个数组,但我不知道如何。 我不想通过for来实现它,因为我认为有更好的解决方案,但我找不到它。 我的代码如下所示。
...
userDatabase.userDao().getById(id)
.subscribeOn(Schedulers.io())
.observeOn(SchedulerProvider.ui())
.map {
InfoStruct(
it.Name.toString(),
it.Id.toString()
)
}
.subscribe(
{println("${it.userName} || ${it.userId}")},
{println("Error")}
)
...
我将一个值传递给 getById 方法参数 - 一个标识符,然后发送如下请求:select * where id =: id。 我想传递一个标识符数组作为参数来一次获取多个用户的数据,但我不想更改请求的结构。 如何才能做到这一点?
您可以使用一个 dao,例如 getByManyIds(),它使用 WHERE 子句,该子句根据提供的列表返回一个列表。
SELECT 子句可能类似于
@Query("SELECT * FROM the_table WHERE id IN (:idlist)"
List<your_type> getByManyIds(appropriate_type idlist);
适当的类型应该是 id 的 int[]、long[]、String[] 等适当的数组(Room 将生成适当的逗号分隔列表)。
假设您的 Dao 方法如下所示:
@Query("SELECT * FROM user WHERE id = :id"
Single<User> getById(String id);
你需要做的就是把它改成这样:
@Query("SELECT * FROM user WHERE id IN (:ids)"
Single<List<User>> getByIds(List<String> ids);
然后像这样使用它:
userDatabase.userDao().getByIds(listOfIds)
.subscribeOn(Schedulers.io())
.observeOn(SchedulerProvider.ui())
.map { users ->
users.map {
InfoStruct(
it.Name.toString(),
it.Id.toString()
)
}
}
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.