创建父实体,然后使用父 ID 创建子实体
Create parent entity then create children entities with parent 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))
}))
}
您现在应该看到真正抛出了什么错误。
在我的代码中,一个 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))
}))
}
您现在应该看到真正抛出了什么错误。