【发布时间】:2018-08-22 10:57:41
【问题描述】:
我正在尝试将 RxJava2 与 Room 持久性库一起使用,它对于 DAO 文件中的 @Query 注释运行良好,但对于 @Insert 它说它不会从 RxJava2 返回任何内容,所以我如何将它包装在 Observable 中以使用使用 RxJava2。
DAO 文件
@Dao
public interface WordDao {
@Insert
void insert(Word word);
@Query("delete from word_table")
void deleteAll();
@Query("select * from word_table order by word_id asc limit 1")
Maybe<Word> getTheIndexOfTopWord();
}
我从中调用这些函数的存储库文件,
public class Repository {
private WordDao wordDao;
private WordRoomDatabase db;
private LiveData<List<Word>> allWords;
public Repository(Application application) {
db = WordRoomDatabase.getDatabase(application);
wordDao = db.wordDao();
allWords = wordDao.getAllWords();
}
public LiveData<List<Word>> getAllWords() {
return allWords;
}
public void insertWord(Word word) {
//here I can't subscribe due to the return type-----------------------
db.wordDao().insert(word).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MaybeObserver<Void>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Void aVoid) {
//
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
}
});
}
}
【问题讨论】:
-
使用
Completable。 -
是的,成功了!谢谢!
标签: android rx-java repository-pattern rx-java2 android-room