Realm数据库问题收集

1 生成不了moudleMediator

RealmException: Could not find io.realm.XXXMoudleMediator

主要原因是build.gradle缺少:

apply plugin: 'kotlin-kapt'

在 Kotlin 中通过 kapt 编译器插件支持注解处理器,由于缺少该插件将会导致Realm的所有注解无法被解析,所以会出现形如标题中的错误(注意该插件一定要写在Realm插件的上面,不然也会出现该错误)

正确顺序写法如下:

apply plugin: 'com.android.application'
 
apply plugin: 'kotlin-android'
 
apply plugin: 'kotlin-android-extensions'
 
apply plugin: 'kotlin-kapt'
 
apply plugin: 'realm-android'

2 library中的moudle需要添加library

Realm的默认架构只是项目中的所有Realm模型类。但是,您可以更改此行为-例如,您可能希望限制Realm仅包含类的子集。为此,请创建一个自定义RealmModule

// 创建module
@RealmModule(classes = { Person.class, Dog.class })
public class MyModule {
}

// 在RealmConfiguration中将module设置为仅允许该module定义的类。
RealmConfiguration config = new RealmConfiguration.Builder()
  .modules(new MyModule())
  .build();

// 可以将多个module组合成一个模式。
RealmConfiguration config = new RealmConfiguration.Builder()
  .modules(new MyModule(), new MyOtherModule())
  .build();

对于库开发人员来说: 包含Realm的库必须通过RealmModule公开并使用其架构。这样做会阻止为库项目生成默认的RealmModule,这会与App使用的默认RealmModule相冲突。库的RealmModule也是库向应用程序公开其Realm类的方式。

// 库必须创建一个module并设置library = true。 这将阻止创建默认module。
// 可以使用allClasses = true来代替列出库中的所有类。
@RealmModule(library = true, allClasses = true)
public class MyLibraryModule {
}

// 因此,需要图书馆项目明确设置自己的module。
RealmConfiguration libraryConfig = new RealmConfiguration.Builder()
  .name("library.realm")
  .modules(new MyLibraryModule())
  .build();

// 应用程序可以将库RealmModule添加到其自己的架构中。
RealmConfiguration config = new RealmConfiguration.Builder()
  .name("app.realm")
  .modules(Realm.getDefaultModule(), new MyLibraryModule())
  .build();

Realm.getDefaultModule()会包含当前moudle中所有标记realm的类

一个文件中不能有多个RealmModule声明。如果您有两个或多个RealmModule,则必须将声明分成多个文件,每个文件中只有一个声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值