草庐IT

room_book

全部标签

android - 如何使用 Room 和 RxJava 插入数据?

db.activitiesDao().insertStep(step);这将返回臭名昭著的错误:java.lang.IllegalStateException:CannotaccessdatabaseonthemainthreadsinceitmaypotentiallylocktheUIforalongperiodoftime.我是RxJava的新手,不想使用AsyncTask。 最佳答案 尝试这样的事情。Observable.fromCallable(()->db.activitiesDao().insertStep(step)

android - 带有 RxJava2 的 Android Room 中的交易

我的应用程序的一个要求是允许用户完成多个步骤,然后在完成后根据每个步骤中的条目将值写入数据库。UI中的每个步骤都可能有助于将需要写入数据库的操作。数据可能位于多个表中,并且属于这些表中的不同行。如果任何数据库操作失败,则整个操作应该失败。我最初考虑将所有数据加载到内存中,对其进行操作,然后简单地在每个可能的实体中调用更新方法(使用REPLACE的冲突策略),但内存中的数据量可能非常大.我认为我可以组装一个列表,其中显示中的每个fragment都提供一个或多个可完成项,然后在UI流结束时使用Completable.concat()按顺序执行这些项。它看起来像下面这样:Completabl

android - 我们如何在 ViewModel 中将 "assign"LiveData 从 Room 转移到 MutableLiveData

最近,我被下面的代码困住了。publicclassNoteViewModelextendsViewModel{privatefinalMutableLiveData>notesLiveData=newMutableLiveData();publicNoteViewModel(){LiveData>notesLiveDataFromRepository=NoteRepository.INSTANCE.getNotes();//HowcanI"assign"LiveDatafromRoom,toMutableLiveData?}}我想知道,如何将Room中的LiveData“分配”到Mut

一篇聊聊Jetpack Room实现数据存储持久性

Room介绍Room是AndroidJetpack组件库中的一部分,它是用于在Android应用中进行本地数据库访问和管理的库。Room提供了一个抽象层,使开发者能够更轻松地访问SQLite数据库,并且可以在不直接使用SQL语句的情况下进行数据库操作。Room主要包括三个主要组件:Entity:用于定义数据库中的表结构,每个实体类对应数据库中的一张表。DAO(DataAccessObject):用于定义数据库操作的接口,开发者可以在DAO中定义各种数据库操作方法,Room会根据这些方法自动生成相应的SQL查询语句。Database:用于定义数据库的抽象类,其中包括数据库的版本号、实体类和DAO

android - 如何在android中获取Room数据库的行数?

我正在遵循拥有一个Repository和一个Dao等的做法。我试图通过一个函数来获取数据库存储库中的行数intgetNumFiles(){Listlst=files.getValue();//filesisoftypeLiveData>files;if(lst==null){return0;}else{returnlst.size();}}但是lst总是求值为null。我想这与我不被允许从UI线程或其他东西查询数据库有关?我应该像实现添加或删除元素那样实现它吗?换句话说,在Dao中有一个函数是通过数据库存储库中的AsyncTask调用的?我对如何做这个非常简单的事情感到困惑。有this

android - 如何使用 Android Room Persistence Library 实现多对多关系?

如何使用AndroidRoomPersistenceLibrary实现多对多关系?一个用户可能拥有一个或多个设备,一个设备可能由一个或多个用户拥有。@EntitypublicclassUser{public@PrimaryKeyLongid;publicStringuserName;}@DaopublicinterfaceUserDao{@Query("select*fromuser")ListgetAllUsers();@Query("select*fromuserwhereid=:id")UsergetUserById(longid);}@EntitypublicclassDevi

android - 如何使用列表大小与 Room 数据库返回的列表大小不同的 AAC 分页库

我正在尝试使用新的PagingLibrary和Room作为数据库,但我遇到了一个问题,PagedList返回数据库不应该是发送到UI的同一个列表,我在向用户显示之前map一些实体,在此map操作期间我更改了列表大小(添加项目),显然PagingLibrary不支持这种操作,因为当我尝试运行该应用程序时出现此异常:Causedby:java.lang.IllegalStateException:InvalidFunction'function_name'changedreturnsize.Thisisnotsupported.查看分页库源代码你会看到这个方法:staticListconv

Android Room library - 选择嵌入式实体的所有字段

我有两个具有外键关系的实体:product和category。@Entity(primaryKeys="id")publicclassProduct{publicfinallongid;@NonNullpublicfinalStringname;@ForeignKey(entity=Category.class,parentColumns="id",childColumns="categoryId")publicfinallongcategoryId;publicProduct(longid,@NonNullStringname,longcategoryId){this.id=id;t

java - 如何从服务中的 Room 数据库读取数据并监听更改?

我正在将用户信息存储在本地房间数据库中。在Activity和fragment中,我使用AndroidViewModel和LiveData来监听对数据库所做的更改并更新UI。现在我想分析所有过去的用户数据,为future的决策提供建议。我的建议会随着用户对数据库所做的每次更改而改变,因此我需要经常更新我的建议,同时一遍又一遍地进行相同的计算。我正在考虑在应用程序启动时启动一项服务,该服务通过ViewModel和LiveData监听数据库更改并更新我的建议(也存储在同一数据库中)。但不知何故服务不能通过viewModel=ViewModelProviders.of(this).get(Da

android - 如何使用 Android Room 进行单行查询

如何使用RxJava使用AndroidRoom进行单行查询?我能够查询项目列表,没有问题。在这里,我想查找特定行是否存在。根据文档,如果不存在任何行,看起来我可以返回Single并检查EmptyResultSetException异常。我可以有这样的东西:@Query("SELECT*FROMUsersWHEREuserId=:idLIMIT1")SinglefindByUserId(StringuserId);如何使用此调用?看起来有一些onError/onSuccess但在Single上找不到这些方法。usersDao.findByUserId("xxx").???任何工作示例都会