Realm not auto-deleting database if migration needed

后端 未结 2 1566
走了就别回头了
走了就别回头了 2021-01-21 22:57

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         


        
相关标签:
2条回答
  • 2021-01-21 23:31

    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.

    0 讨论(0)
  • 2021-01-21 23:34

    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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题