java.lang.IllegalArgumentException: Категорията не е част от схемата за тази област

Използвам 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();

Получавам „io.realm.RealmObject“, което не е равно на RealmObject.class. Така че Realm може да не го разглежда като RealmObject.

Възможно ли е това да е причината, която причинява грешка?


person Shivang Doshi    schedule 09.07.2015    source източник
comment
Кога виждате съобщението за грешка? Добавихте ли класа Category в по-нова версия на вашето приложение и мигрирахте ли Realm файла?   -  person geisshirt    schedule 10.07.2015
comment
Виждам съобщението за грешка по време на изпълнение, когато се опитвам да отправя запитване към Realm. Не разбрах втория въпрос. Приложението ми няма друга база данни, създавайки от нулата с Realm, така че не се налага да мигрирам, нали?   -  person Shivang Doshi    schedule 10.07.2015
comment
Имате ли шанс да разберете това? Получих този проблем, когато активирах Proguard. Използвате ли ButterKnife?   -  person Ralphilius    schedule 13.07.2015
comment
@kodingralph не, все още нямам. и не, не използвам ButterKnife. Работеше ли ти преди това?   -  person Shivang Doshi    schedule 15.07.2015
comment
Да, можете ли да публикувате своя дневник на конзолата на Gradle?   -  person Ralphilius    schedule 15.07.2015
comment
Сигурни ли сте, че сте активирали обработката на анотация? Използвам kotlin за realm. И аз имам същия проблем, докато не използвам kapt за обработка на анотацията.   -  person blade    schedule 09.08.2015


Отговори (4)


В моя случай трябва да добавя плъгин за realm (приложи плъгин: 'realm-android') към всеки .gradle проект, който използва realm. RealRecyclerView и моят основен проект за приложение.

person darkwater84    schedule 11.04.2016

Открих, че редът, в който са посочени плъгините във файла build.gradle на вашето приложение, има значение. В моя случай имах плъгина за прилагане: „realm-android“ в него, но очевидно беше посочен твърде рано. Поставянето му последно проработи.

Това се провали.

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

И все пак това проработи (обърнете внимание колко реален Android е последен).

apply plugin: 'com.android.application'
apply plugin: 'android-apt'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
person T. Francis    schedule 07.12.2016

Не знам дали все още имате този проблем, но от моя страна просто изчиствам проекта и изграждам отново. След това работи добре... Моля, обърнете внимание, че имам Android Studio като ide.

person Lucian Novac    schedule 11.02.2016

В моя случай имах две отношения "един към много". Два класа на връзката бяха в различни модули. Това предизвика грешка. Когато ги сложих в един и същи модул, се получи. Това е свързаната част от източника:

    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);
    }
}
person ulusoyca    schedule 16.06.2016