【问题标题】:java.lang.IllegalArgumentException: Category is not part of the schema for this Realmjava.lang.IllegalArgumentException:类别不是此领域架构的一部分
【发布时间】:2015-07-09 18:10:45
【问题描述】:

我使用的是 Android Studio 1.2.2 和 Realm 0.81.1。 我创建了一个模型“类别”,如下所示:

@RealmClass
public class Category extends RealmObject {
   private String name;
   // getter and setter
}

但我得到了 java.lang.IllegalArgumentException:类别不是此领域架构的一部分

我什至启用了注释处理,但错误仍然存​​在。

我该如何解决这个错误?非常感谢任何帮助。

更新

我深入研究了 Realm 代码。我发现在 Util.class 文件中,

if(!superclass.equals(RealmObject.class)) {
        clazz = superclass;
    }

它正在检查我正在使用的模型的超类。当我打印出模式的超类时;我自己,比如:

category.getClass().getSuperclass().getName();

我得到不等于 RealmObject.class 的 'io.realm.RealmObject'。所以 Realm 可能不会将其视为 RealmObject。

这可能是导致错误的原因吗?

【问题讨论】:

  • 什么时候看到错误信息?您是否在较新版本的应用中添加了 Category 类并迁移了 Realm 文件?
  • 当我尝试查询领域时,我在运行时看到错误消息。第二个问题我没看懂。我的应用没有任何其他数据库,使用 Realm 从头开始​​创建,所以我不必迁移,对吧?
  • 你有机会解决这个问题吗?我在启用 Proguard 时遇到了这个问题。你用黄油刀吗?
  • @kodingralph 不,我还没有。不,我不使用黄油刀。在那之前它对你有用吗?
  • 您确定启用了注释处理吗?我正在将 kotlin 用于领域。在我使用 kapt 处理注释之前,我遇到了同样的问题。

标签: android android-studio realm annotation-processing


【解决方案1】:

就我而言,我需要将领域插件(应用插件:'realm-android')添加到每个使用领域的 .gradle 项目中。 RealRecyclerView 和我的主要应用项目。

【讨论】:

    【解决方案2】:

    我发现在您的应用程序的 build.gradle 文件中指定插件的顺序很重要。就我而言,我有应用插件:'realm-android',但显然它被指定得太早了。把它放在最后一次工作。

    这失败了。

    apply plugin: 'com.android.application'
    apply plugin: 'realm-android'
    apply plugin: 'android-apt'
    apply plugin: 'com.neenbedankt.android-apt'
    

    然而这行得通(注意 real-android 是最后一个)。

    apply plugin: 'com.android.application'
    apply plugin: 'android-apt'
    apply plugin: 'com.neenbedankt.android-apt'
    apply plugin: 'realm-android'
    

    【讨论】:

      【解决方案3】:

      我不知道你是否还有这个问题,但在我这边,我只是清除项目并重新构建。之后工作正常...请注意我有 android studio 作为 ide。

      【讨论】:

        【解决方案4】:

        就我而言,我有两个一对多的关系。两类关系位于不同的模块中。这导致了错误。当我将它们放在同一个模块中时,它就起作用了。这是来自来源的相关部分:

            public <E extends RealmModel> E copyOrUpdate(Realm realm, E obj, boolean update, Map<RealmModel, RealmObjectProxy> cache) {
            // This cast is correct because obj is either
            // generated by RealmProxy or the original type extending directly from RealmObject
            @SuppressWarnings("unchecked") Class<E> clazz = (Class<E>) ((obj instanceof RealmObjectProxy) ? obj.getClass().getSuperclass() : obj.getClass());
        
            if (clazz.equals(Buddy.class)) {
                return clazz.cast(BuddyRealmProxy.copyOrUpdate(realm, (Buddy) obj, update, cache));
            } else {
                throw getMissingProxyClassException(clazz);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多