插入查询
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insertProduct(Product product); //product id is auto generated
查看模型
public Completable insertProduct(final String productName) {
return new CompletableFromAction(() -> {
Product newProduct = new Product();
newProduct.setProductName(productName);
mProductDataSource.insertOrUpdateProduct(newProduct);
});
}
在我调用上面这个函数的活动中,我使用了CompositeDisposable。
CompositeDisposable mDisposable = new CompositeDisposable();
mDisposable.add(mViewModel.insertProduct(productName))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() ->{} ,throwable -> Log.e(TAG, "Error msg", throwable)));
我是以错误的方式实施的吗?
答案 0 :(得分:4)
根据setTimeout。如果@Insert方法只接收1个参数,则它可以返回long,这是插入项的新rowId。如果参数是数组或集合,则应返回long []或List。 由于您只插入一个项目,因此该方法只返回一个rowID。
所以,试试这个
Single.fromCallable(new Callable<Long>() {
@Override
public Long call() throws Exception {
return productDao.insertProduct(new Product()));
}
})
.subscribe(id -> {
} ,throwable -> Log.e(TAG, "Error msg", throwable)))
您也可以使用Observable
或Maybe
。但我认为Single
更合适,因为在你的情况下,id是自动生成的,插入应该总是完成。