We are in development and db schema changes occur often. Since we are not live, migrations are not needed. I therefor configured Realm as follows:
RealmConfigura
We had a similar issue. We solved this by adding
Realm.getInstance(config)
right after
Realm.setDefaultConfiguration(config);
We think the configuration will be set up after Realm is called the first time. This time we don't use any Realm object so there's no exception.
Super late answer by in case anyone has same problem you can look at what I did based on Dagger2.
First create a module:
@Module
public class DatabaseModule {
public DatabaseModule(Context context) {
Realm.init(context);
RealmConfiguration config = new RealmConfiguration.Builder()
.name("mydb.realm")
.schemaVersion(1)
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
}
@Provides
Realm provideRealm() {
return Realm.getDefaultInstance();
}
}
Its Context
is comming from another module
@Module
public class ApplicationModule {
private Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Context provideContext() {
return application;
}
}
This is you App level component:
@Singleton
@Component(modules = {ApplicationModule.class, DatabaseModule.class, NetworkModule.class})
public interface ApplicationComponent {
void inject(HomeActivity activity);
}
Finally use it in your Activity/Fragment:
public class HomeActivity {
@Inject Realm mRealm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupDependencyInjection();
setContentView(R.layout.activity_home);
// Now you can use Realm
}
private void setupDependencyInjection() {
((YourApplication) getApplication())
.getAppComponent()
.inject(this);
}
}