如何解决创建父实体,然后创建具有父ID
在我的代码中,一个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()
以记录错误:
Completable createHero(List<Power> powers) {
return heroDao.create(new Hero())
// add explicit error log
.doOnError(e -> Log.e("ERROR","insert hero error",e))
.flatMapCompletable(heroId -> Observable.fromIterable(powers)
.flatMapCompletable(power -> {
power.setHeroId(heroId);
return create(power)
.doOnError(e -> Log.e("ERROR","insert power error",e))
}))
}
现在您应该看到真正引发了什么错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。