Articles of android room

房间无法validation数据的完整性

使用Room Database运行程序时出现此错误 Room cannot verify the data integrity. Looks like you’ve changed schema but forgot to update the version number. You can simply fix this by increasing the version number. 看来我们需要更新数据库版本,但是我们可以在Room中做到这一点?

具有Android Room的可重用通用基类DAO

有没有办法用Android Room创建可重用的通用基类DAO? public interface BaseDao { @Insert void insert(T object); @Update void update(T object); @Query(“SELECT * FROM #{T} WHERE id = :id”) void findAll(int id); @Delete void delete(T object); } public interface FooDao extends BaseDao { … } public interface BarDao extends BaseDao { … } 我无法find实现这一目标的任何方法,而无需声明相同的接口成员并为每个子类编写查询。 在处理大量类似的DAO时,这变得非常乏味……

房间找不到实施

我在测试Room数据库时遇到问题:当我运行测试时,我得到以下exception: java.lang.RuntimeException: cannot find implementation for database.TicketDatabase. TicketDatabase_Impl does not exist at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:92) at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:454) at com.sw.ing.gestionescontrini.DatabaseTest.setDatabase(DatabaseTest.java:36) at java.lang.reflect.Method.invoke(Native Method) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at […]

Android会议室数据库:如何处理实体中的Arraylist?

我刚刚实施了Room来进行离线数据保存。 但在Entity类中,我收到以下错误: Error:(27, 30) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it. 课程如下: @Entity(tableName = “firstPageData”) public class MainActivityData { @PrimaryKey private String userId; @ColumnInfo(name = “item1_id”) private String itemOneId; @ColumnInfo(name = “item2_id”) private String itemTwoId; // THIS IS CAUSING THE ERROR… BASICALLY […]

Android room persistent:AppDatabase_Impl不存在

我的app数据库类 @Database(entities = {Detail.class}, version = Constant.DATABASE_VERSION) public abstract class AppDatabase extends RoomDatabase { private static AppDatabase INSTANCE; public abstract FavoritesDao favoritesDao(); public static AppDatabase getAppDatabase(Context context) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, Constant.DATABASE).allowMainThreadQueries().build(); //Room.inMemoryDatabaseBuilder(context.getApplicationContext(),AppDatabase.class).allowMainThreadQueries().build(); } return INSTANCE; } public static void destroyInstance() { INSTANCE = null; } } Gradle lib: […]

房间试图重新打开已经关闭的数据库

使用Android架构组件中的Room时,在尝试使用Dagger组件访问数据库时收到以下错误: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: (database path) 我使用Dagger版本2.11和Room版本1.0.0-alpha7 。 该错误在版本1.0.0-alpha5上可重现。 初始化数据库并将其注入我的类后,任何尝试通过DAO访问数据库时都会发生此错误。

Android会议室:如何建立关系模型?

我刚刚开始与Room合作,虽然一切看起来都非常直观,但我目前还不清楚我究竟能如何处理关系。 由于SQLite是关系数据库,因此您可以指定对象之间的关系。 尽管大多数ORM库允许实体对象相互引用,但Room明确禁止这样做。 即使您不能使用直接关系,Room仍然允许您在实体之间定义外键约束。(来源: https : //developer.android.com/topic/libraries/architecture/room.html#no-object-references ) 你应该如何模拟多对多或一对多的关系? 这在实践中会是什么样子(示例DAO +实体)?

Android会议室:订单不工作

我正在使用新的Android ORM Room。 我遇到了问题。 带参数的ORDER BY不起作用。 如果我想使用ORDER BY参数中的字段,则无效。 没有任何吸引力。 @Query(“SELECT * FROM User ORDER BY :orderBY ASC”) List sortedFind(String orderBY); 但是,当我直接将哪个字段排序然后它按预期工作。 @Query(“SELECT * FROM User ORDER BY name ASC”) List sortedFind(); 它是android Room上的bug,还是我做错了什么?

Android Room连接的返回types

假设我想在两个实体Foo和Bar之间进行INNER JOIN : @Query(“SELECT * FROM Foo INNER JOIN Bar ON Foo.bar = Bar.id”) List findAllFooAndBar(); 是否可以强制这样的返回types? public class FooAndBar { Foo foo; Bar bar; } 当我尝试这样做时,我收到此错误: error: Cannot figure out how to read this field from a cursor. 我也尝试使表名称别名以匹配字段名称,但这也不起作用。 如果这不可能,我应该如何干净地构建包含两个实体的所有字段的兼容返回types?

室内数据库中的硬编码布尔查询

我正在构建一个Android应用程序,显示用户可能匹配的列表。 用户可以单击一个以喜欢用户,并在本地保存所有这些喜欢。 我可以编写一个查询来获取匹配列表,如下所示: @Query(“SELECT * FROM match WHERE liked = :liked ORDER BY match DESC LIMIT :limit”) fun getMatches(limit: Int = 6, liked: Boolean = true): Flowable<List> 我已经知道这很好用。 但是,我没有预见到任何情况下我会设置liked假,所以我很好奇是否有办法硬编码我的布尔条件? 如果我尝试: @Query(“SELECT * FROM match WHERE liked = true ORDER BY match DESC LIMIT :limit”) 我在编译时遇到以下错误: Error:(8, 0) Gradle: error: There is a problem with the […]