插入查询
@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)));
我是否以错误的方式实施?
根据docs https://developer.android.com/topic/libraries/architecture/room.html#daos-convenience。如果@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
or Maybe
以及。但我觉得Single
更适合,因为在您的情况下,id 是自动生成的,并且插入应该始终完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)