当前位置: 首页 > 知识库问答 >
问题:

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

澹台建华
2023-03-14

我正在使用room将前台位置服务获取的数据与an活动进行通信。服务连接到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()) );

    } );
}

@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( ... ) ) );

}
@Dao
public interface DataDao {

    @Query( "SELECT * FROM eData" )
    LiveData<List<eData>> getAllData();

    @Insert
    long insertData( eData data );
}
@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;
    }

共有1个答案

哈烨熠
2023-03-14

最后却没有在服务中使用任何空间。第一,我不知道它是否会更快;第二,如果我只是坚持使用活动,并且只创建一次ViewModel和ExecutorService的话,它会占用更少的内存

 类似资料:
  • 在Room中添加新创建的对象时,自动生成主键,新创建的对象将保留其未定义的主键。当您需要修改此对象并保留更改时,这证明是不方便的。 让我们举个例子。 因此,让我们创建一个,其是自动生成的。 我们有以下Dao: 我们通过以下存储库进行交互: 所以,现在如果我们这样做,将不会被更新,因为将保持在0并且注释仅在主键已经存在的情况下更新行。 为了解决这个问题,我们可以将的方法更改为在插入后更新id。这个问

  • 我用这个房间已经有一段时间了。我来自mysql的背景,您必须检查查询和其他内容的值。在room中,我发现这有点复杂,因为到目前为止,我可以将dao insert查询声明为void,或者只要返回rowId,如果返回long,我就必须编写一个侦听器来通知UI成功/失败。我的问题是,这是否必要?我是否需要insert/updates/deletes的返回值,或者这些查询是否保证成功?

  • 问题内容: 我正在尝试创建一个具有ActivityList信息的简单Android应用程序,当该应用程序启动时,我计划启动一个将不断计算数据(它将不断变化)的服务,并且我希望ActivityList与之同步服务在应用程序生命周期内正在计算的数据。 如何设置我的活动以收听服务?这是解决此问题的最佳方法吗? 例如,如果您想象一个股票价格列表,则该数据将定期更改,并且需要与不断计算/获取数据的(在我的情

  • 正如标题所说,在我的本地WAMP测试服务器上工作得很好。然而,本地测试服务器上安装的相同PHP版本是5.6.12,mysql的实时版本是5.6.39。活站点上的所有其他插入和表都可以工作,只有一个我有问题,直到我以不同的用户登录到该站点,并且它在他们的配置文件下工作。最后一个就没这么幸运了。等了一天,它没有插入到任何配置文件下的表中。此外,我还通过在脚本末尾使用echo语句来确认它正确地提取数据。

  • 问题内容: 编辑。在扩展基本存储库类并添加insert方法的同时,一个更优雅的解决方案似乎是在实体中实现Persistable。查看 可能的解决方案2 我正在使用Hibernate作为ORM 创建服务。 遵循本教程的基础。 http://www.petrikainulainen.net/spring-data-jpa- tutorial/ 我的实体存储库扩展 我正在使用使用有意义的主键而不是自动生

  • 我需要更新,如果不存在插入行到ROOM DB。 我这样做: