Questions tagged «android-room»

对于与Android Room Persistence库(这是Android体系结构组件的一部分)有关的问题

7
Room-未将模式导出目录提供给注释处理器,因此我们无法导出模式
我正在使用Android数据库组件室 我已经配置了所有内容,但是在编译时,Android Studio会向我发出以下警告: 模式导出目录未提供给注释处理器,因此我们无法导出模式。您可以提供room.schemaLocation注释处理器参数,也可以 将exportSchema设置为false。 据我了解,这是数据库文件所在的位置 它如何影响我的应用程序?最佳做法是什么?我应该使用默认位置(false值)吗?

6
如何将主键作为Room Persistence lib的自动增量
我正在创建一个Entity(Room Persistence lib)类Food,我想在其中将其foodId作为自动增量。 @Entity class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double) { @PrimaryKey var foodId: Int = 0 var calories: Double = 0.toDouble() } 如何设置foodId自动递增字段?


12
如何摆脱增量注释处理请求的警告?
我刚刚开始使用android开发并尝试使用Room库。从昨天开始我就面临着这个警告信息 w:[kapt]请求了增量注释处理,但是由于以下处理器不是增量处理器而被禁用:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL),androidx.room.RoomProcessor(NON_INCREMENTAL)。 我试图研究和修复,但无法避免此错误,这是我的grale.build文件。请提出建议/建议我在做什么错。 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "ps.room.bookkeeper" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation":"$projectDir/schemas".toString()] } } buildTypes { release { minifyEnabled false …

20
持续的Android会议室:AppDatabase_Impl不存在
我的应用程式资料库类别 @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 = …

7
Android Room-通过自动生成获取新插入行的ID
这就是我使用Room Persistence Library将数据插入数据库的方式: 实体: @Entity class User { @PrimaryKey(autoGenerate = true) public int id; //... } 数据访问对象: @Dao public interface UserDao{ @Insert(onConflict = IGNORE) void insertUser(User user); //... } 在上述方法本身中完成插入后,无需编写单独的选择查询,是否可以返回User的ID?

19
Android Room-简单选择查询-无法访问主线程上的数据库
我正在使用Room Persistence Library尝试一个示例。我创建了一个实体: @Entity public class Agent { @PrimaryKey public String guid; public String name; public String email; public String password; public String phone; public String licence; } 创建了一个DAO类: @Dao public interface AgentDao { @Query("SELECT COUNT(*) FROM Agent where email = :email OR phone = :phone OR licence = :licence") …

6
更新Android Room中实体的某些特定字段
我正在为新项目使用android房间持久性库。我想更新表的某些字段。我已经尝试过Dao - // Method 1: @Dao public interface TourDao { @Update int updateTour(Tour tour); } 但是,当我尝试使用此方法进行更新时,它将更新与巡回对象的主键值匹配的实体的每个字段。我用过了@Query // Method 2: @Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid") int updateTour(long tid, String end_address); 它正在工作,但由于我实体中有许多字段,因此我的情况下将有很多查询。我想知道如何更新某些字段(不是全部),例如Method 1id = 1;(id是自动生成的主键)。 // Entity: @Entity public class Tour { @PrimaryKey(autoGenerate = true) public long …

3
Android Room-使用LIKE选择查询
我正在尝试查询所有名称包含文本的对象: @Query("SELECT * FROM hamster WHERE name LIKE %:arg0%") fun loadHamsters(search: String?): Flowable<List<Hamster>> 讯息: Error:no viable alternative at input 'SELECT * FROM hamster WHERE name LIKE %' Error:There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (near "%": syntax error) Error:Unused parameter: arg0 我也在尝试: @Query("SELECT * …

6
如果仅添加新表,则迁移会议室数据库
假设我有一个简单的Room数据库: @Database(entities = {User.class}, version = 1) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } 现在,我要添加一个新实体:Pet并将版本增加到2: @Database(entities = {User.class, Pet.class}, version = 2) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } 当然,Room会引发异常: java.lang.IllegalStateException: A migration from 1 to 2 is necessary. 假设我没有更改User类(因此所有数据都是安全的),我必须提供仅创建一个新表的迁移。因此,我正在研究Room生成的类,搜索生成的查询以创建我的新表,将其复制并粘贴到迁移中: final Migration …

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


5
如何从后台服务和更新UI更新ViewModel的LiveData
最近,我正在探索Google最近引入的Android体系结构。从文档中我发现: public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) { users = new MutableLiveData<List<Users>>(); loadUsers(); } return users; } private void loadUsers() { // do async operation to fetch users } } 活动可以访问此列表,如下所示: public class MyActivity extends AppCompatActivity { public void …

20
会议室无法验证数据完整性
使用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中完成呢?

6
Android Room:使用Room插入关系实体
我已使用Relation在Room中添加了一对多关系。我参考了这篇文章,为Room中的关系编写了以下代码。 该帖子介绍了如何从数据库中读取值,但是将实体存储到数据库中导致结果userId为空,这意味着两个表之间没有关系。 我不知道什么是理想的途径,insert一个User并List of Pet到数据库中,同时具有userId价值。 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 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.