[英]Insert to room in service not updating LiveData in activity
我正在使用聊天室来与活动进行通信,以通信由前台定位服务获取的数据。 该服务连接到ViewModel并插入数据,但是该活动未从ViewModel接收更新的LiveData,但是该服务能够在开始时以正确的大小获取LiveData>对象,然后重新启动应用程序。 我在这里想念什么? 我需要向数据库中插入新数据,因此,如果确实需要在服务和postValue中使用MutableLiveData,则每次都必须发布整个列表...
Activity.java
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.track_activity );
mViewModel = ViewModelProviders.of( this ).get( ViewModel.class );
mViewModel.getAllData().observe( this, ( @Nullable final <List<eData>> data ) -> {
if ( data!= null )
Log.d("DATACOUNT", String.valueOf(data.size()) );
} );
}
Service.java
@Override
public void onCreate() {
super.onCreate();
AppDatabase mDB = AppDatabase.getDatabase( this.getApplication() );
mDataDao = mDB.dataDao();
mExecutor = Executors.newSingleThreadExecutor();
}
...
private void receiveLocation( LocationResult locationResult ) {
...
mExecutor.execute( () -> mDataDao.insertData( new eData( ... ) ) );
}
DataDao.java
@Dao
public interface DataDao {
@Query( "SELECT * FROM eData" )
LiveData<List<eData>> getAllData();
@Insert
long insertData( eData data );
}
AppDatabase.java
@Database(entities = { eData.class }, version = 1 )
public abstract class AppDatabase extends RoomDatabase {
public abstract DataDao dataDao();
private static AppDatabase INSTANCE;
public static AppDatabase getDatabase( final Context context ) {
if ( INSTANCE == null ) {
synchronized ( AppDatabase.class ) {
if ( INSTANCE == null ) {
INSTANCE = Room.databaseBuilder( context.getApplicationContext(),
AppDatabase.class, "locationapp" )
.build();
}
}
}
return INSTANCE;
}
存储库和数据库均为单例。 但是以某种方式在活动中观察到的LiveData在服务中插入实体时不会更新,但确实会插入数据库中,因为当我重新启动应用程序时,计数增加了。
最终根本没有使用服务中的空间。 一,我不知道是否会更快,二,如果我只坚持活动并且只创建一次ViewModel和ExecutorService,它会使用更少的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.