【发布时间】:2020-08-19 10:30:50
【问题描述】:
在我的代码中,Hero 有许多 Power。要创建一个Power 对象,我需要一个heroId。在这种情况下,我正在尝试创建一个英雄,然后赋予该英雄多种权力。
因此,HeroDao:
@Dao
public interface HeroDao {
@Insert
Single<Long> create(Hero hero);
}
还有PowerDao:
@Dao
public interface PowerDao {
@Insert
Completable create(Power power);
}
所以,
Completable createHero(List<Power> powers) {
return heroDao.create(new Hero())
.flatMapCompletable(heroId -> Observable.fromIterable(powers)
.flatMapCompletable(power -> {
power.heroId = heroId;
return powerDao.create(power);
}))
.subscribeOn(Schedulers.io());
}
但这反而会引发异常:
io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with.
该异常还提供了一个link,它解释了有关该特定错误的更多信息,但细节对我来说没有意义,因为我是一个初学者,使用 RxJava 的经验有限。
发生了什么事?
更新: 在我的 ViewModel 中,订阅如下所示:
createHero(powers)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::success, this::error);
【问题讨论】:
-
能否分享您订阅
createHero()电话的部分? -
另外,为什么不把
Powers 列表作为属性放在Hero类中,而HeroDao将拥有insert和update,以防分配新的权力?对我来说更有意义。 -
我的错。我已经用我在 ViewModel 中的订阅方式更新了这个问题。请检查。
标签: android android-room rx-java2