Android room rxjava多次调用onNext,即使没有数据库更改
我有一个使用Room with RXJava的项目,因为我需要听到银行的变化并在屏幕上实时反映出来 当我打开需要这些数据的屏幕时,它订阅了这个查询,数据正确地到达了屏幕上,但是当放置一个括号点并进行调试时,我可以看到onNext被多次调用,即使没有数据库更改,也不会停止 是否有人知道此行为是否可以更改,是否希望仅在数据库发生更改时调用onNextAndroid room rxjava多次调用onNext,即使没有数据库更改,android,rx-java2,android-room,Android,Rx Java2,Android Room,我有一个使用Room with RXJava的项目,因为我需要听到银行的变化并在屏幕上实时反映出来 当我打开需要这些数据的屏幕时,它订阅了这个查询,数据正确地到达了屏幕上,但是当放置一个括号点并进行调试时,我可以看到onNext被多次调用,即使没有数据库更改,也不会停止 是否有人知道此行为是否可以更改,是否希望仅在数据库发生更改时调用onNext @Dao public abstract class CarDao { @Query("SELECT * FROM cars ")
@Dao
public abstract class CarDao {
@Query("SELECT * FROM cars ")
public abstract Observable<List<Car>> fetchCars();
}
@Dao
公共抽象类CarDao{
@查询(“从车辆中选择*)
公共抽象的可观察的汽车();
}
看法
public MyActivity扩展活动{
........
公共汽车{
carDAO.fetchCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
公开无效订阅(一次性d){}
@凌驾
公共交通工具(列出车辆){
**Log.d(“应用程序”、“MyActivity-carDAO.getCar-onNext”)**
}
@凌驾
公共无效者(可抛弃者){}
@凌驾
公共void onComplete(){}
});
}
}
您在哪里调用fetchCars()
方法?每当您第一次订阅时,carDAO.fetchCars()将根据查询发出数据库中存在的所有数据,之后,它将侦听更改。即使调用正确(这些多次调用可能是一些与房间无关的错误),我怀疑您是否能够在不使用LiveData的情况下接收更改。
public MyActivity extends Activity {
........
public void fetchCars(){
carDAO.fetchCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Car>>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(List<Car> Cars) {
**Log.d("app", "MyActivity - carDAO.getCar - onNext ")**
}
@Override
public void onError(Throwable t) {}
@Override
public void onComplete() {}
});
}
}