使用 RxJava (Room) 获取插入 ID
Getting insert id with RxJava (Room)
我可以使用 RxJava 添加一行,
Completable.fromAction(() -> db.userDao().insert(user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
});
道:
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(User user);
如何获取DB操作后的row id?
如果你想在 Room 中使用 RxJava,你可以将 insert
函数更改为 return RxJava Single wrapping a Long
,例如:
@Insert
Single<Long> insert(User user);
这样你就可以订阅这个 Single
然后你会得到像这样的 id:
db.userDao().insert(user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Long aLong) {
// aLong is the id
}
@Override
public void onError(Throwable e) {
}
});
我可以使用 RxJava 添加一行,
Completable.fromAction(() -> db.userDao().insert(user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
});
道:
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(User user);
如何获取DB操作后的row id?
如果你想在 Room 中使用 RxJava,你可以将 insert
函数更改为 return RxJava Single wrapping a Long
,例如:
@Insert
Single<Long> insert(User user);
这样你就可以订阅这个 Single
然后你会得到像这样的 id:
db.userDao().insert(user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Long aLong) {
// aLong is the id
}
@Override
public void onError(Throwable e) {
}
});