You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:20:37