草庐IT

android - Kotlin 数据类、Android Room 和自定义 setter

我得到了一个AndroidRoom的实体,看起来像那样。到目前为止,不用担心。@Entity(tableName="users",indices=arrayOf(Index(value="nickName",unique=true)))dataclassUser(@ColumnInfo(name="nickName")varnickName:String,@ColumnInfo(name="password")varpassword:String){@ColumnInfo(name="id")@PrimaryKey(autoGenerate=true)varid:Long=0}现在我需

java - 无法使用 Gson 将对象(使用 Room DB)序列化为 json 字符串

我有一个类Item(见下文),我在其中使用了一些Roomdb注释。它还有一个名为ItemInfo的嵌套类。这两个类都有一个空的构造函数。问题是,当我尝试序列化Item类的对象时,应用程序崩溃并出现以下错误:E/AndroidRuntime:FATALEXCEPTION:mainProcess:com.android.carrymates,PID:18526java.lang.SecurityException:Cannotmakeajava.lang.reflect.Methodconstructoraccessibleatjava.lang.reflect.AccessibleObj

java - "Type of the parameter must be a class annotated with @Entity"在 Room 中创建 Generic DAO 接口(interface)时

我正在使用Room架构组件来实现持久性。我创建了通用的DAO接口(interface)以避免样板代码。RoomProTips但是我的代码没有编译说“错误:(21、19)错误:参数的类型必须是用@Entity注释的类或其集合/数组。”对于通用类T。interfaceBaseDao{@Insert(onConflict=OnConflictStrategy.REPLACE)voidinsert(T...entity);@Updatevoidupdate(Tentity);@Deletevoiddelete(Tentity);}@DaopublicabstractclassReasonDao

android - Room - 检查最近是否获取了数据

官方GuidetoAppArchitecture是存储库的一个例子。检查一个对象是否存在于数据库中以及是否是新的://checkifuserwasfetchedrecentlybooleanuserExists=userDao.hasUser(FRESH_TIMEOUT);关于如何为DAO实现该功能(hasUser)有什么想法吗? 最佳答案 大多数架构组件示例可用here.在你的例子中,我找不到UserDao类,但有一个数据库模式示例here.users表有一个last_update列。所以你可以这样写UserDao:@Query(

android - 使用Room时如何加密数据库?

我们想在我们正在开发的应用程序中使用Room,但我们需要加密数据库。我知道有用于加密SQL数据库的SQLCipher(虽然我从未使用过它),但我认为它不支持API级别16和更高级别的方法,所以我认为Room不受支持。另一方面,有支持加密的Realm,但我真的很想改用Room。那么我们如何加密数据库呢?非常感谢 最佳答案 IthinkthatitdoesnotsupportAPIlevel16andhighermethods,soIthinkthatRoomisnotsupported嗯,到目前为止,myCWAC-SafeRoomli

Android Room - 自动生成主键

我遇到一个问题,我无法找到有关RoomforAndroid和自动生成主键的任何文档。我有一个看起来像这样的实体类:@EntitypublicclassPreference{@PrimaryKey(autoGenerate=true)privateintid;publicvoidsetId(intid){this.id=id;}}当我手动设置id时,这工作正常,但当我没有设置主键时,我收到关于主键为null的错误。查看自动生成的文件,我看不到它会自动递增主键的任何地方。所以我想我的问题是:您可以使用setter自动生成私有(private)成员的主键,还是我需要在setter中手动自动生

android - 无法使用 Room persistence 获取查询结果

我正在使用Room持久性库开发一个Android应用程序。我有一个用户和一个汽车实体@Entity(tableName="users")publicclassUser{@PrimaryKey@NonNullprivateintid;privateStringname;publicUser(@NonNullintid,Stringname){this.id=id;this.name=name;}}和@Entity(tableName="cars",foreignKeys=@ForeignKey(parentColumns="id",childColumns="userId",entity

android - 在 Room 中通过 id 获取项目

我在我的Android项目中使用Room+LiveData。按照GoogleBlueprints,我已经实现了我的应用程序的数据层。这是我的Dao的样子:@Query("SELECT*FROMeventsWHEREid=:arg0")funloadSingle(id:String):LiveData我从我的EventRepository调用它:funloadSingle(eventId:String):LiveData>{returnobject:NetworkManager(appExecutors!!){overridefunloadLocal():LiveData{valitem

android - 使用迁移升级 Room DB 会导致数据库锁定

我要回答我自己的问题,这是问题描述。所以我有一个在应用商店上发布的应用程序,随着我想发布的新版本的发布,数据库模式发生了变化,所以我自然必须进行迁移,以将其从版本3升级到最新版本5。这包括提供从3到4和从4到5的迁移。或者一次性从3到5。这就是我所做的,我提供了这些迁移并将它们提供给RoomdatabaseBuilder()并且一切都准备就绪以模拟发生应用程序升级的场景(安装商店版本,运行它,登录,创建数据库,生成生产APK并通过终端将其安装到设备上,运行)这样做总是会产生以下异常:05-1902:38:00.3636472-6522/co.myapp.appE/ROOM:Invali

android - 如何在 Android Room 中存储对象?

基本上,有两件事我不明白:带有对象的对象和带有对象列表的对象假设我从服务器收到一个对象列表。他们每个人看起来像这样:@EntitypublicclassBigObject{@PrimaryKeyprivateintid;privateUseruser;privateListsmallObjects;}将这两个对象作为字段:@EntitypublicclassUser{@PrimaryKeyprivateintid;privateStringname;@TypeConverters(GenderConverter.class)publicMyEnums.Gendergender;}@En