[英]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.