Java 插入到服务中的房间,但不更新活动中的LiveData

Java 插入到服务中的房间,但不更新活动中的LiveData,java,android,android-service,android-room,Java,Android,Android Service,Android Room,我正在使用room将前台位置服务获取的数据和活动进行通信。该服务连接到viewmodel并插入数据,但活动不会从viewmodel接收更新的LiveData,但它能够在开始时获取LiveData>对象,在重新启动应用程序时具有准确的大小。我错过了什么?我需要向数据库中插入新数据,因此如果我确实需要在服务和postValue中使用MutableLiveData,那么每次都必须发布整个列表 Activity.java @凌驾 创建时受保护的void(Bundle savedInstanceStat

我正在使用room将前台位置服务获取的数据和活动进行通信。该服务连接到viewmodel并插入数据,但活动不会从viewmodel接收更新的LiveData,但它能够在开始时获取LiveData>对象,在重新启动应用程序时具有准确的大小。我错过了什么?我需要向数据库中插入新数据,因此如果我确实需要在服务和postValue中使用MutableLiveData,那么每次都必须发布整个列表

Activity.java


@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.track_活动);
mViewModel=ViewModelProviders.of(this.get)(ViewModel.class);
mViewModel.getAllData().observe(这,(@Nullable final data)->{
如果(数据!=null)
Log.d(“DATACOUNT”,String.valueOf(data.size());
} );
}
Service.java

@覆盖
public void onCreate(){
super.onCreate();
AppDatabase mDB=AppDatabase.getDatabase(this.getApplication());
mDataDao=mDB.dataDao();
mExecutor=Executors.newSingleThreadExecutor();
}
...
私有无效接收位置(LocationResult LocationResult){
...
execute(()->mDataDao.insertData(新的eData(…));
}
DataDao.java

@Dao
公共接口DataDao{
@查询(“从eData中选择*)
LiveData getAllData();
@插入
长插入数据(eData数据);
}
AppDatabase.java

@数据库(实体={eData.class},版本=1)
公共抽象类AppDatabase扩展了RoomDatabase{
公共抽象DataDao DataDao();
私有静态数据库实例;
公共静态AppDatabase getDatabase(最终上下文){
if(实例==null){
已同步(AppDatabase.class){
if(实例==null){
实例=Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class,“locationapp”)
.build();
}
}
}
返回实例;
}

存储库和数据库都是单例的。但是,当我在服务中插入实体时,在我的活动中观察到的LiveData不会更新,它会插入数据库,因为当我重新启动应用程序时,计数会增加。

最终根本没有使用服务中的room。一,我不知道它是否会更快,二,我如果我只执行活动,只创建一次ViewModel和ExecutorService,则会使用更少的内存。

您的服务应该直接与DAO(或存储库,以您使用的为准)对话,并且应该没有ViewModel。此外,此问题中缺少DAO声明,因此我们无法知道您使用的是与房间DAO的集成类型。我已添加了声明,并测试了与它直接对话。活动中的LiveData仍然不会更新行数。是的,通过查看数据库和重新启动应用程序/活动,rowcount上升到以前的最大值。只是在服务运行和插入时不更新…@Flecibel您解决了问题了吗。我遇到了一些问题similar@rial请参阅此答案:确保在插入和侦听更新时使用相同的DAO实例。服务必须使用与视图模型相同的实例。