0
还有就是我如何保存我的数据与RxJava:SQLite的交易和RxJava
override fun put(note: Note): Observable<Note> {
validateNote(note)
return Observable.just(note)
.doOnNext { dbKeeper.startTransaction() }
.doOnNext { storeHashtags(note) }
.doOnNext { storeImages(note) }
.flatMap { notesDataStore.put(notesMapper.transform(note)) }
.map { notesMapper.transform(it) }
.doOnNext { dbKeeper.setTransactionSuccessful() }
.doOnUnsubscribe { dbKeeper.endTransaction() }
}
然后我用这个方法是这样的:
notesManager.put(note)
.switchMap { notesManager.getHashtags() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {view.setHashtags(it) }
而且doOnUnsubscribe
从来没有被称为getHashtags()
试图以供选择分贝由startTransaction()
锁定。僵局,呃。 好的。我们将doOnUnsubscribe(...)
替换为doOnTerminate(...)
。
override fun put(note: Note): Observable<Note> {
validateNote(note)
return Observable.just(note)
.doOnNext { dbKeeper.startTransaction() }
.doOnNext { storeHashtags(note) }
.doOnNext { storeImages(note) }
.map { notesMapper.transform(note) }
.flatMap { notesDataStore.put(it) }
.map { notesMapper.transform(it) }
.doOnNext { dbKeeper.setTransactionSuccessful() }
.doOnTerminate { dbKeeper.endTransaction() }
}
但现在交易不会关闭,如果Observable
将subscriber.unsubscribe()
中断。
你能推荐什么来解决我的情况?
附加信息: 我使用一个writableDb实例来写入/读取数据。
是的,我已经理解Rx不适合这种情况。但是改变项目的架构为时已晚。感谢您的解决方案。也许我会使用'BlockingObservable'作为'notesDataStore.put()'和类似的方法。 – Alexandr
我已添加编辑。 –
看起来很有趣,我会尝试一下。谢谢! – Alexandr