我正在Android应用程序中试用Realm.io,不过,为了安全起见,我想抽象DB层,以便在需要时可以切换回基于SQLite的标准无需重写大部分应用程序的数据库。然而,由于Realm的特殊性质,我发现很难正确抽象它:当绑定(bind)到一个Realm时,RealmObjects是代理,所以我不能像POJO一样传递它们。所有Realm实例都需要在使用它们的每个线程中正确打开和关闭。我已经使用最近的Realm.copyFromRealm()API而不是传递与Realm绑定(bind)的RealmObjects来绕过这些限制,但我认为这样我就失去了使用realm的所有好处(是吗?).有什么
如果我有一个原始值数组,我如何在RealmResults的.where()上运行.not().contains()?代码应该是这样的:results.where().not().contains("id",newint[]{1,2,3})或者我是否必须遍历所有这些结果并单独提取它们? 最佳答案 您可以尝试beginGroup然后不in查询数组realm1.where(UserModel.class)..beginGroup().not().in("key",YourArray)).endGroup().findAll();
当流式传输Realm对象的副本而不是Realm引用并在Schedulers.IO线程上观察它时,会发生崩溃并出现著名的异常消息“从不正确的线程访问Realm。Realm对象只能在创建它们的线程中访问”副本不应该是无线程的吗?我可以从一个线程生成它并在不同的线程上处理它吗?这就是我创建observable的方式。publicObservablegetAllBrands(){returnrealm.where(Brand.class).findAll().asObservable().flatMap(Observable::from).map(brand->realm.copyFromRe
我想在RealmDB迁移过程中更改字段名称。似乎不支持更改字段名称,只能复制并删除。这是正确的吗?它会消耗大量时间。下面的代码是我尝试以复制和删除的方式将字段value更改为summary。RealmSchemaschema=realm.getSchema();schema.get("Invoice").transform(newRealmObjectSchema.Function(){@Overridepublicvoidapply(DynamicRealmObjectobj){obj.set("summary",obj.getString("value"));}}).removeF
我是Realm的新手,我想知道在Application对象中只拥有一个Realm实例是否是一种好的做法,在应用程序需要的所有情况下使用它,并且只在onDestroy中关闭它>应用程序类。谢谢 最佳答案 在UI线程上保持Realm打开而不关闭它本质上没有错(注意Application上没有OnDestroy)但是您应该牢记以下几点:1)Realm可以很好地处理被杀死的进程,这意味着忘记关闭Realm不会对您的数据造成危险。2)当应用程序进入后台时不关闭Realm意味着如果系统资源不足,您将更有可能被系统杀死。正如Emanuele所说。
我正在开发一个使用Realm数据库作为我的本地数据库的Android应用程序,我如何将Realm中的记录与我的服务器端MySQL数据库同步? 最佳答案 2016年9月27日更新:Realm现在完全支持与Realm对象服务器同步数据。更多详情可用here.2016年6月19日没有这样的方式——Realm没有这样的机制,这是合乎逻辑的。您混合使用不同的方法——同步数据和在本地存储(Realm、SQLite和其他Android移动数据库的使命)。您可以通过自己的自定义实现(likeinthetutorial)或使用SyncAdapter来
我正在尝试:mRealm.where(Contact.class).equalTo(Contact.NAME,text,Case.INSENSITIVE).findAllSortedAsync(Contact.NAME,Sort.ASCENDING);结果:未达到预期结果。mRealm.where(Contact.class).contains(Contact.NAME,text,Case.INSENSITIVE).findAllSortedAsync(Contact.NAME,Sort.ASCENDING);结果:未达到预期结果。预期结果:mRealm.where(Contact.c
我在Realm数据库中保存了一组不同类型的对象。现在我想查询某种类型的对象,包括该对象的所有字段。我在下面编写的方法是获取对象的所有声明字段并迭代这些字段以检查是否包含给定的查询字符串。它适用于字符串字段类型但抛出java.lang.IllegalArgumentException:Field'documentCompletionStatus':typemismatch。是STRING,预期为INTEGER。对于整数值,因为我的搜索查询对象是字符串。作为解决方法,我暂时跳过非字符串值,但我很好奇是否可以在所有字段中搜索它。例如,如果用户想要搜索针对对象的“Age”字段的整数值,我无法使
在Realm数据库解决方案中,如何以最佳性能获取最新插入的项目?这段代码是我解决这个问题的方法ListallItems=realm.where(Transactions.class).findAll().sort("createdAt",Sort.DESCENDING);StringlatestId=allItems.get(0).getId();getUserLatestTransactions(Integer.parseInt(latestId));是否有任何其他解决方案或Realm已经实现了? 最佳答案 这是您可以做的-考虑到
我们如何将java列表存储在realmandroid数据库中。我尝试使用我的模型中存在的setter方法来存储它,但它不起作用,并且我在异常消息中收到“'value'的每个元素必须是有效的托管对象”。publicvoidstoreNewsList(StringcategoryId,ListnewsList){Realmrealm=Realm.getDefaultInstance();realm.beginTransaction();NewsListnewsListObj=realm.createObject(NewsList.class);newsListObj.setNewsList