Realm.init(this)をApplicationクラスのonCreateに配置しました。
ただし、アクティビティのonCreateでRealm.getDefaultInstance()を呼び出している間は、例外がスローされます。
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2511)
at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1360)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:148)
at Android.app.ActivityThread.main(ActivityThread.Java:5480)
at Java.lang.reflect.Method.invoke(Method.Java)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:726)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
Caused by: Java.lang.IllegalStateException: Call `Realm.init(Context)` before calling this method.
at io.realm.Realm.getDefaultInstance(Realm.Java:208)
at com.kimi.fastdb.PrefActivity.getRealmHelper(PrefActivity.Java:1724)
at com.kimi.fastdb.PrefActivity.onCreate(PrefActivity.Java:270)
at com.kimi.fastdb.LauncherActivity.onCreate(LauncherActivity.Java:464)
at Android.app.Activity.performCreate(Activity.Java:6308)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1107)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2400)
アプリケーションの起動後にレルムインスタンスが初期化されないのはなぜですか?そしてそれを修正する方法は?
応用:
public class App extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
.schemaVersion( REALM_DATABASE_VERSION ) // Must be bumped when the schema changes
.migration( migration ) // Migration to run instead of throwing an exception
// .deleteRealmIfMigrationNeeded()
.build();
Realm.compactRealm( realmConfiguration );
Realm.setDefaultConfiguration(realmConfiguration);
}
...
}
AndroidManifest.xml
<application
Android:name=".App"
Android:allowBackup="true"
Android:allowClearUserData="true"
Android:allowTaskReparenting="false"
Android:hardwareAccelerated="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:largeHeap="true"
Android:theme="@style/SplashScreenTheme">
...
</application>
試してみてください:
Realm.init(getApplicationContext());
Realm realm = Realm.getDefaultInstance();
特定の構成がある場合:
Realm.init(getApplicationContext());
Realm realm = Realm.getInstance(RealmConfiguration yourConfg);
その後、トランザクションを開始してコミットできます。