簡體   English   中英

插入服務室而不更新活動中的LiveData

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM