Tag: android room

我可以在Android上的多个线程中使用相同的RoomDatabase对象吗?

我在Android上使用Room persistence库。 目前,每次访问数据库时都会有一些额外的同步代码。 我想知道这段代码是否必要。 我目前以单身人士的身份访问数据库。 这就是我当前将对象插入数据库的方式: // Insert values into DB final AppDatabase db = AppDatabase.get(this); AsyncTask.execute(new Runnable() { @Override public void run() { synchronized (db) { for (WorkOrder wo : workOrderList) { db.workOrderDao().insertAll(wo); } } } }); 我是否需要在同步块中插入代码?

如何正确激活活动外的服务?

我正在尝试构建一个依赖Web服务工作的应用程序。 为了实现它,我决定遵循Model-View-ViewModel架构和Repository模式。 我尝试使这个架构受到Android开发人员官方网站的应用程序架构指南中所示指南的启发。 我使用OkHttp库来使用WebService,并使用Room作为手机的数据库。 我做了一些测试,看看应用程序是否通过Web服务从主要活动中成功获得了数据,并且它有效; 应用程序成功收到数据。 ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { connected = false; Log.i(“MainActivity”, “MyWebService DISconnected successfully.”); } @Override public void onServiceConnected(ComponentName name, IBinder service) { myweb_service = ((MyWebService.LocalBinder)service).getService(); connected = true; Log.i(“MainActivity”, “MyWebService connected successfully.”); } }; void doBindMyWebService() { if (bindService(new Intent(this, MyWebService.class), connection, Context.BIND_AUTO_CREATE)) […]

在Kotlin中使用Room的@ForeignKey作为@Entity参数

我遇到了一个Room 教程 ,它使用了类定义上的@PrimaryKey注释: @Entity(foreignKeys = @ForeignKey(entity = User.class, parentColumns = “id”, childColumns = “userId”, onDelete = CASCADE)) public class Repo { … } 现在,我有以下想要使用主键的数据类: @Parcel(Parcel.Serialization.BEAN) data class Foo @ParcelConstructor constructor(var stringOne: String, var stringTwo: String, var stringThree: String): BaseFoo() { … } 所以,我刚刚在@Entity(tableName = “Foo”, foreignKeys = @ForeignKey(entity = Bar::class, parentColumns = “someCol”, childColumns = […]

在第二次插入电话磁盘上的数据库后,房间停止插入

每当我在数据库中插入内容时,前两个插入都会通过并保存在磁盘中。 通过使用“Android调试数据库”,我可以检查插入的行,看看它是否成功。 第三个插入物总是卡在那里。 无论之后跟随多少插入,它们都不会保存在磁盘中。 直到我重新启动应用程序然后再次运行,然后它重新开始并在第二次插入后停止插入。 我实际上以各种可能的方式调试了我的应用程序。 有效负载每次都是正确的。 事实上,插入是成功的。 如果我运行查询并获取行(SELECT *),它会返回三个插入。 所有这三个。 但是,在磁盘中,它仍然只显示两个插入。 如果我重新启动应用程序并再次运行查询并获取行(SELECT *),它将返回到两行。 似乎问题似乎在某些低级别上持续存在,因为我的代码是正确的。 这也是我没有在这里发布的原因。 相信我已经多次检查过。 我只需要答案,为什么它会在第二次插入后停止将数据从缓存传输到手机磁盘上的数据库?

在Room中创建Generic DAO接口时,“参数的类型必须是使用@Entity注释的类”

我正在使用Room架构组件来实现持久性。 我已经创建了通用DAO接口以避免样板代码。 Room Pro Tips 但是我的代码没有编译说错误:(21,19)错误:参数的类型必须是用@Entity或它的集合/数组注释的类。“ 对于通用类T. interface BaseDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(T… entity); @Update void update(T entity); @Delete void delete(T entity); } @Dao public abstract class ReasonDao implements BaseDao { @Query(“SELECT * from Reason”) abstract public List getReasons(); } 这里有什么我想念的吗? 它就像这样工作