我正在尝试将RxJava2与Room Persistence库一起使用,并且它对于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() {
}
});
}
}
答案 0 :(得分:0)
如下定义您的insert()
方法。
@Insert
long insert(Word word);
其中返回的long
值是您的Word
实体的ID。 (您可以返回与Word
实体ID匹配的任何数据类型)
答案 1 :(得分:0)
其中一种方法是
@Dao
public interface SomeDao{
@Insert
long[] insert(Word word);
}
在Rxjava中是
Single.fromCallable(() -> yourDataBase.someDao().insert(word)).subscribeOn(Schedulers.io()).subscribe();
插入应始终返回long []或Long []。您无法将其包裹在可观察的范围内。但是您仍然可以将其包装为可调用的,可观察的或可流动的。