2017-01-23 9 views
1

レルムをライブラリとメインアプリケーションで使用しようとしていますが、メインアプリケーションのモデルがスキーマに含まれていないと不平を言っています。私は基本的に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)  

エラーはできるだけ早く私はレルムに何か保存しようとしてトリガされる - Iにログインした後、すなわち、ユーザの詳細を保存しようとしている、それがクラッシュします。

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

そのAppDataAccessorを言及する価値がある:私は次のようにレルムのインスタンスを取得しようと、ライブラリに続いて、このコード

@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(); 
} 

を持っている主なアプリケーションのための私のアプリケーションクラスで

私のアプリケーションクラスで実装されているインターフェイスです。

@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 { 
} 
すべてのヘルプははるかに高く評価されるだろう

、ありがとう!

+0

'getRealmConfig'の' new RealmModule() 'のように見えますが、ライブラリモジュールを選択します。完全なパッケージ名を使用しようとしましたか? – geisshirt

答えて

1

今朝問題が見つかりました。

私は、メインアプリケーションとライブラリ用のRealmModuleを定義していました。それはライブラリのためだけ必要です。

関連する問題