当前位置: 首页 > 知识库问答 >
问题:

如何在RxJava中实现可完成性与单件性的结合

邬英武
2023-03-14

我正在构建一个应用程序,从互联网缓存数据,当手机脱机时,它将显示脱机项目(该功能按预期工作)。现在我很难包含一个刷新选项(我基本上会删除缓存中的项,并尝试获取更多最近的项)。我有两个问题:

  1. 我不知道如何将Completable和Single结合起来,它给了我一个错误,下面的函数都不能用提供的参数调用
  2. 我不知道如何将参数传递给andThen运算符中的函数getWeather。
fun deleteWeatherForecast(lat : Double, lng: Double) : Completable
{
    return lWeatherRepo.deleteWeatherForecast(lat,lng)
            .andThen(rWeatherRepo::getWeather(lat,lng))
        .subscribeOn(Schedulers.io())
}
fun deleteWeatherForecast(lat: Double, lng: Double) : Completable
{
    return weatherDao.deleteForecastByLocation(lat,lng)
}

RemoteWeatherRepository

fun getWeather(lat: Double, lng: Double): Single<Weather> {
    val locationStr = String.format("%f,%f",lat,lng)
    return weatherService.getWeatherForecastResponse(API_KEY,locationStr)
}

我选择Completable是因为我想等到删除完成后再获取下一个

共有1个答案

越心水
2023-03-14

您可以像这样重写天气存储库

fun deleteWeatherForecast(lat : Double, lng: Double) : Completable
{
    return lWeatherRepo.deleteWeatherForecast(lat,lng)
            .andThen(rWeatherRepo.getWeather(lat,lng))  // answer question 2
            .ignoreElement() // answer question 1, convert single to completable
        .subscribeOn(Schedulers.io())
}
 类似资料:
  • 假设存在包含方法的接口: 实现combinedCall方法的最佳方法是什么: 从makeHttpCall获取数据 使用store InDatabase存储它 返回在store InDatabase完成时完成的完成? 似乎在RxJava 1.0中可以执行Completable.merge(可观察),但合并似乎不再接受可观察。

  • 突变性可以是性状中的一个通用参数吗?我想为一个类型的可变和不可变变体实现一个特性,而不必复制 一厢情愿的伪代码:

  • 我目前在Android和Kotlin上使用RxJava,但我有一个问题,如果不使用toBlocking(),我无法解决。 我在员工服务中有一个方法,它返回一个可观察的 这一切都很好,因为每当员工发生变化时,这个可观察对象就会发出新的员工列表。但是我想从员工那里生成一个PDF文件,这显然不需要每次员工更改时都运行。另外,我想从PDF生成器方法返回一个可完成的对象。我想在PDF中添加一个标题,然后遍历

  • a、b默认都可选,但当a有值时,让b成为必填项。 应该如何实现?

  • (1)什么是可重入性 一个线程持有锁时,当其他线程尝试获取该锁时,会被阻塞;而这个线程尝试获取自己持有锁时,如果成功说明该锁是可重入的,反之则不可重入。 (2)synchronized是如何实现可重入性 synchronized关键字经过编译后,会在同步块的前后分别形成monitorenter和monitorexit两个字节码指令。每个锁对象内部维护一个计数器,该计数器初始值为0,表示任何线程都可

  • 我的JTable有一个单元编辑器,作为DefaultCellEditor(JComboBox)类的实例实现。我尝试了几种不同的方法(为Swing组合框添加自动完成支持),但仍然不起作用。 1: 2: 3: 我面临的问题是,一旦用户开始在组合框中输入,它就会退出编辑模式,从而有效地防止输入任何值。