解决Kotlin中Realm报错:NewsItem不在Realm Schema中
解决Realm报错:NewsItem is not part of the schema for this Realm
先梳理下你遇到的情况:
你的代码与配置
数据模型类
NewsResponse类:
open class NewsResponse( @field:SerializedName("news") val news: List<NewsItem?>? = null ): RealmObject()
NewsItem类:
open class NewsItem( @field:SerializedName("created") val created: String? = null, @field:SerializedName("link") val link: String? = null, @field:SerializedName("description") val description: String? = null, @field:SerializedName("title") val title: String? = null ): RealmObject()
Gradle配置
App级build.gradle插件:
apply plugin: 'com.android.application' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' apply plugin: 'kotlin-android' apply plugin: 'io.fabric' apply plugin: 'kotlin-android-extensions'
项目级build.gradle依赖:
classpath "io.realm:realm-gradle-plugin:5.1.0"
报错信息
Caused by: io.realm.exceptions.RealmException: NewsItem is not part of the schema for this Realm at io.realm.internal.modules.CompositeMediator.getMediator(CompositeMediator.java:180)
解决步骤
这个报错的核心是Realm没有将NewsItem识别为它的Schema的一部分,我整理了几个常用且有效的修复方法:
1. 显式指定Realm配置中的模型类
如果你自定义了RealmConfiguration,一定要确保把所有需要的模型类都加进去,Realm有时不会自动扫描到所有类。示例代码:
val realmConfig = RealmConfiguration.Builder() .name("app_realm.realm") .schemaVersion(1) // 直接添加你的两个模型类 .classes(NewsResponse::class.java, NewsItem::class.java) .build() Realm.setDefaultConfiguration(realmConfig)
如果没有自定义配置,尝试删除App的数据(设置->应用->你的App->清除数据),然后重新运行,让Realm重新生成Schema。
2. 清理缓存并重新构建项目
Realm的注解处理器经常会缓存旧的Schema信息,导致新添加的类不被识别。执行以下操作:
- 点击Android Studio顶部的
Build->Clean Project - 接着点击
Build->Rebuild Project - 也可以手动删除项目根目录和
app模块下的build文件夹,彻底清除缓存
3. 调整Realm插件的应用顺序
插件的加载顺序会影响注解处理的逻辑,建议把realm-android插件放在kotlin-kapt之后,修改App级build.gradle:
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' apply plugin: 'io.fabric' apply plugin: 'kotlin-android-extensions'
4. 检查类的访问修饰符
虽然你的类已经是open的(继承RealmObject必须要),但要确保:
- 类和字段的访问修饰符是
public(Kotlin默认是public,没问题,但如果手动改成了internal或private会导致Realm无法扫描) - 不要给模型类添加
@Ignore或其他会排除Schema的注解
5. 升级Realm版本(可选但推荐)
你使用的Realm 5.1.0是比较旧的版本了,存在一些自动扫描Schema的bug。建议升级到较新的稳定版本,比如在项目级build.gradle中修改:
classpath "io.realm:realm-gradle-plugin:10.15.1"
注意升级后可能需要适配部分API,但能解决很多旧版本的遗留问题。
6. 多模块项目检查
如果NewsItem类在单独的模块中,要确保该模块也应用了realm-android插件,并且主App模块正确依赖了该模块。
内容的提问来源于stack exchange,提问作者theanilpaudel
相关产品推荐
相关产品推荐

