在主应用程序和库中使用realm

时间:2017-01-23 15:41:08

标签: android realm

我试图在库和主应用程序中使用Realm,并且它一直在抱怨主应用程序中的模型不是架构的一部分。我基本上以与Realm https://github.com/realm/realm-java/tree/master/examples/moduleExample提供的示例相似的方式实现了所有内容,并且我遇到了完全相同的问题。

错误:

io.realm.exceptions.RealmException: class package.models.User is not part of the schema for this Realm.
at io.realm.internal.RealmProxyMediator.getMissingProxyClassException(RealmProxyMediator.java:241)
at io.realm.RealmModuleMediator.getTableName(RealmModuleMediator.java:107)
at io.realm.RealmSchema.getTable(RealmSchema.java:296)
at io.realm.Realm.checkHasPrimaryKey(Realm.java:1469)
at io.realm.Realm.copyToRealmOrUpdate(Realm.java:902)      

当我尝试将某些内容保存到Realm时会触发错误 - 即在登录后我试图保存用户的详细信息并且崩溃。

在我的主应用程序的应用程序类中,我已经获得了此代码

   @Override
public void onCreate() {
    super.onCreate();
    this.mPrefs = getSharedPreferences(Constants.SHARED_PREFERENCES, 0);

    instance = this;

    // initialisations
    Realm.init(this);
    config = new AppConfig(mPrefs);

    this.realm = Realm.getInstance(getRealmConfig());
}

public Realm getLibraryRealm(Object module, String name){
    RealmConfiguration config = new RealmConfiguration.Builder()
            .name(name)
            .schemaVersion(1)
            .modules(module)
            .build();
    return Realm.getInstance(config);
}

public RealmConfiguration getRealmConfig(){
    return new RealmConfiguration.Builder()
            .name(getPackageName())
            .schemaVersion(1)
            .modules(new RealmModule())
            .build();
}

然后在库中我尝试获取Realm实例,如下所示:

 AppDataAccessor app = (AppDataAccessor) getApplication();
 Realm realm = app.getRealm(new RealmModule(), Constants.REALM_NAME);

值得一提的是,AppDataAccessor是一个由我的应用程序类实现的接口。

此外,主应用程序和库都具有以下定义的领域模块:

@io.realm.annotations.RealmModule(library = true, classes = { DataSet.class, Field.class, Form.class })
public class RealmModule {
}

和主应用程序:

@io.realm.annotations.RealmModule(classes = {Notification.class, User.class})
public class RealmModule {
}

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

我今天早上发现了这个问题。

我为主应用程序和库定义了一个RealmModule。它只对图书馆有用。

答案 1 :(得分:1)

对于 app模块,请使用Realm.getDefaultModule(),对于其他模块/库,只需像RealmModule类一样使用自定义领域模型即可。