[RxJava2] Is SqlBrite have a way to stop trigger Subscription(Disposable) for a single modify sql execution?
KpStP opened this issue · 3 comments
Updated Question.
I am using BriteContentResolver to create query, that query associate with a Disposable. This Disposable keep listen any changes of specify table. I want execute a modify sql without trigger QueryObservable. Is SqlBrite have a way to do this?
private CompositeDisposable disposables = new CompositeDisposable();
private Disposable disposable;
private void initialize(){
QueryObservable queryObservable = mContentResolverHelper.createQuery(TableA.buildTableUri(), TableAColumns, null, null, null, false);
disposable = RxJavaInterop.toV2Observable(queryObservable
.mapToList(mTableAMapperFunction)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Item>>() {
@Override
public void onNext(List<Item> items) {
// do something
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
disposables.add(disposable);
}
private void updateTitleWithoutTriggerDisposable(String id, String value){
ContentValues values = new ContentValues();
values.put("title", value);
// expect the update not trigger the disposable.
mContentResolver.update(TableA.buildTableUri(), values, "id=?", {id});
}
Sorry, my question was unclear. I want the disposable keep subscribe any changes of TableA, except the update from updateTitleWithoutTriggerDisposable().
Updated code:
private CompositeDisposable disposables = new CompositeDisposable();
private Disposable disposable;
private void initialize(){
QueryObservable queryObservable = mContentResolverHelper.createQuery(TableA.buildTableUri(), TableAColumns, null, null, null, false);
disposable = RxJavaInterop.toV2Observable(queryObservable
.mapToList(mTableAMapperFunction)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Item>>() {
@Override
public void onNext(List<Item> items) {
// do something
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
disposables.add(disposable);
}
private void updateTitleWithoutTriggerDisposable(String id, String value){
ContentValues values = new ContentValues();
values.put("title", value);
// expect the update not trigger the disposable.
mContentResolver.update(TableA.buildTableUri(), values, "id=?", {id});
}
RxJava has switchmap operator that unsubscribes from previous inner
Observable when upstream emits:updateSql.switchMap { sqlBrite.query()}
We have no way of ignoring updates. SQL Brite just wraps the normal content resolver notifications. So if Android sends the trigger then SQL Brite reacts to the trigger.