【发布时间】:2020-05-26 12:46:06
【问题描述】:
我需要填写对象的字段才能将其发布到 API。
我正在使用 rxjava 和 room,但我的订单链失败了
我的道
@Dao
abstract public class PokemonDao implements BaseDao<Pokemon>{
@Query("SELECT * FROM pokemons ORDER BY id ASC")
abstract public Flowable<List<Pokemon>> getAll();
}
@Dao
abstract public class NoteDao implements BaseDao<Note>{
@Query("SELECT * FROM notes WHERE idPokemon = :idPokemon ORDER BY registerDate DESC")
abstract public Flowable<List<Note>> getNotes(int idPokemon);
}
我需要创建一个对象,其中包含口袋妖怪的数据以及相关的笔记列表
我在我的视图模型上做了以下操作
pokemonRepository.getFavourites()
.toObservable()
.flatMap(new Function<List<Pokemon>, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(List<Pokemon> favourites) throws Exception {
return Observable.fromIterable(favourites);
}
})
.flatMap(new Function<Object, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Object o) throws Exception {
return getNotesObservable((Favourite) o);
}
})
.toList()
.toObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new SingleObserver<List<Object>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(List<Object> objects) {
}
@Override
public void onError(Throwable e) {
}
})
我也用这个方法
private Observable<Object> getNotesObservable(Pokemon favourite) {
Observable<Object> lolo = noteRepository.getNotes(Integer.parseInt(favourite.getId()))
.map(new Function<List<Note>, Object>() {
@Override
public Favourite apply(List<Note> notes) throws Exception {
favourite.notesList= notes;
return favourite;
}
})
.toObservable();
return lolo;
}
我的问题是,在 subscribeWith 上永远不会调用 onNext 方法。 我的目标是,当 onNext 被调用时,它应该有一个口袋妖怪列表,每个口袋妖怪都应该有他们的笔记
谢谢
【问题讨论】:
-
也许你应该试试one-to-many relations in Room。它似乎可以给你你想要的东西,而不需要对数据进行这种操作
-
我有两个课程:口袋妖怪和笔记。所以每个口袋妖怪都可以有一个相关的笔记列表。我不认为我有你建议的“房间中的一对多关系”@sergiytikhonov
-
我刚刚提到了另一种方式,您可以考虑一下。为此,您需要 3 个类 - Pokemon(无列表)、Note 和 PokemonWithList(这将是一对多关系)。后一个类必须是普通类,不与 SQLite 关联。详细信息和示例在上面的文档链接中。但是您可以按照自己的方式进行操作)我个人认为将值列表保存在表格列中不是很干净,但这是一个品味问题
-
感谢@sergiytikhonov 的帮助。如果我创建类 PokemonWithList ,我仍然需要调用 1 个查询来获取所有的口袋妖怪,然后调用一个查询来获取我拥有的每个口袋妖怪的注释。我想要实现的是如何通过链接查询来使用 Rxjava 获取所有这些信息。因为首先需要得到口袋妖怪,并且每个口袋妖怪 id 都会得到他们的笔记
-
添加了一个答案,因为在评论中写得太长了。这与我上面提到的文章中的概念相同,但与您的课程相同
标签: java android rx-java android-room