Articles of android room

如何将Room Persistence Library导入Android项目

我最近看到Google I / O Room Persistence Library上宣布的新function与Android上的Sqlite数据库一起使用。 我一直在寻找官方文档 ,我没有find我应该导入到我的Android项目上的gradle文件的依赖项。 有人可以帮个忙吗?

Android Room:使用Room插入关系实体

我在Room使用Relation添加了一对多的关系 。 我在这篇文章中提到了在Room中为关系编写以下代码。 该post讲述了如何从数据库读取值但将实体存储到数据库中导致userId为空,这意味着2个表之间没有关系。 我不确定在具有userId值的情况下insert User和List of Pet插入数据库的理想方式是什么。 1)用户实体: @Entity public class User { @PrimaryKey public int id; // User id } 2)宠物实体: @Entity public class Pet { @PrimaryKey public int id; // Pet id public int userId; // User id public String name; } 3)UserWithPets POJO: // Note: No annotation required at this class […]

房间持久性:错误:实体和Pojos必须具有可用的公共构造函数

我正在将一个项目转换为Kotlin,我正在尝试使我的模型(也是我的实体)成为一个数据类,我打算使用Moshi转换来自API的JSON响应 @Entity(tableName = “movies”) data class MovieKt( @PrimaryKey var id : Int, var title: String, var overview: String, var poster_path: String, var backdrop_path: String, var release_date: String, var vote_average: Double, var isFavorite: Int ) 我无法构建应用程序导致以下错误 实体和Pojos必须具有可用的公共构造函数。 您可以拥有一个空构造函数或其参数与字段匹配的构造函数(按名称和types)。 找不到字段的setter。 我发现的例子离此不远 关于如何解决它的想法?

Android Persistence room:“无法弄清楚如何从游标中读取此字段”

我正在尝试使用新的Android Persistence Room Library在两个数据库表之间创建关系。 我查看了文档,并尝试实现https://developer.android.com/reference/android/arch/persistence/room/Relation.html上的示例: @Entity public class User { @PrimaryKey int id; } @Entity public class Pet { @PrimaryKey int id; int userId; String name; } @Dao public interface UserDao { @Query(“SELECT * from User”) public List loadUser(); } @Dao public interface PetDao { @Query(“SELECT * from Pet”) public List loadUserAndPets(); } public class […]

我怎样才能代表Android Room的多对多关系?

我怎样才能代表与房间的多对多关系? 例如,我有“访客”和“预订”。 预订可以有许多客人,并且客人可以参加许多预订。 这是我的实体定义: @Entity data class Reservation( @PrimaryKey val id: Long, val table: String, val guests: List ) @Entity data class Guest( @PrimaryKey val id: Long, val name: String, val email: String ) 在查看文档时,我遇到了@Relation 。 我发现它真的很混乱。 根据这个,我想创建一个POJO并在那里添加关系。 所以,通过我的例子,我做了以下几点 data class ReservationForGuest( @Embedded val reservation: Reservation, @Relation( parentColumn = “reservation.id”, entityColumn = “id”, entity = […]

Android Room Persistence Library:Upsert

Android的Room持久性库慷慨地包含适用于对象或集合的@Insert和@Update注释。 然而,我有一个用例(包含模型的推送通知)需要UPSERT,因为数据可能存在或可能不存在于数据库中。 Sqlite本身没有upsert,并且在这个SO问题中描述了变通方法。 鉴于那里的解决方案,如何将它们应用于房间? 更具体地说,如何在Room中实现不会破坏任何外键约束的插入或更新? 使用带onConflict = REPLACE的insert将导致onDelete调用该行的任何外键。 在我的情况下,onDelete导致级联,并重新插入一行将导致其他表中的行与外键被删除。 这不是预期的行为。

分页库 – 带有API获取页面和大小的网络+数据库的边界回调

简短的问题 : 使用使用页面+大小加载新页面的API和BoundaryCallback类,从Architecture组件处理Paging库上的数据库+网络的正确方法是什么? 研究和解释 目前,在用于体系结构组件的分页库中使用的类BoundaryCallback接收列表中元素的实例作为参数,而没有该元素所在的实际上下文。 它发生在onItemAtFrontLoaded和onItemAtEndLoaded 。 我的Api应该接收页面和页面大小以加载下一个数据块。 作为分页列表构建器的一部分添加的边界回调应该告诉您何时根据预取距离和页面大小加载下一页数据。 由于Api需要提供页面编号和页面大小,因此我没有看到通过接收onItemAtFrontLoaded和onItemAtEndLoaded提供的列表中的一个元素将其发送到Api的onItemAtEndLoaded 。 检查此链接中的Google示例,他们使用最后一个元素的名称来获取下一个元素,但这不适合具有页面+大小的Api。 他们还有另一个例子,只有使用PagedKeyedDatasource网络,但是没有关于如何将它与数据库和BoundaryCallback混合的样本或线索。 编辑 :到目前为止我find的解决方案只是将最后加载的页面存储在共享首选项上,但这听起来像是一个肮脏的技巧。 有关其官方输入,请参阅https://github.com/googlesamples/android-architecture-components/issues/252#issuecomment-392119468 。

更新android Room中某个实体的某些特定字段

我正在为我的新项目使用android房间持久性库。 我想更新一些表的字段。 我试过像我的Dao – 方法1: @Dao public interface TourDao { @Update int updateTour(Tour tour); } 但是当我尝试使用此方法更新时,它会更新实体的每个字段,它与tour对象的主键值匹配。 我用过@Query 方法2: @Query(“UPDATE Tour SET endAddress = :end_address WHERE id = :tid) int updateTour(long tid, String end_address); 它工作但我的情况下查询太长,因为我的实体中有很多字段。 我想知道如何更新某些字段(不是全部),如method 1 ,其中id = 1;(id是自动生成主键)。 Entity: @Entity public class Tour { @PrimaryKey(autoGenerate = true) public long id; private String startAddress; private […]

如果仅添加新表,则会进行会议室数据库迁移

不要假设,我有一个简单的房间数据库: @Database(entities = {User.class}, version = 1) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } 现在,我正在添加一个新实体: Pet和bumping version to 2: @Database(entities = {User.class, Pet.class}, version = 2) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } 当然,Room会抛出exception: java.lang.IllegalStateException: A migration from 1 to 2 is necessary. 假设,我没有更改User类(因此所有数据都是安全的),我必须提供只创建新表的迁移。 所以,我正在调查Room生成的类,搜索生成的查询以创建我的新表,复制它并粘贴到迁移中: final Migration […]

Android室错误:types转换器无法识别列表的枚举

房间库不识别我为枚举List创build的TypeConverter 。 但是,当我将其更改为枚举的ArrayList它工作正常。 任何人有任何想法,为什么和我能做些什么来使这个工作与List ? (在Kotlin中使用列表更容易,我真的不希望只是因为这个原因转换回ArrayList )。 这是我的代码: 我的模特: @Entity data class Example(@PrimaryKey val id: String?, val name: String, var days: List<DayOfWeek>?) DayOfWeek是一个枚举: enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; val value: Int get() = ordinal + 1 companion object { private val ENUMS = DayOfWeek.values() fun of(dayOfWeek: Int): DayOfWeek { […]