我们正处于开发阶段,并且经常会发生数据库架构更改。由于我们不在线,因此不需要迁移。我因此配置Realm如下:
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name("jt.realm")
.schemaVersion(1)
.deleteRealmIfMigrationNeeded() // todo remove for production
.build();
Realm.setDefaultConfiguration(config);
但是,当架构更改时,会抛出异常:RealmMigration must be provided
我对文档的理解是,Realm应该自动删除数据库,因为配置中存在deleteRealmIfMigrationNeeded(),但这似乎并没有发生。为什么会这样?
Android Studio依赖
编译' io.realm:realm-android:0.86.1'
答案 0 :(得分:2)
我们遇到了类似的问题。我们通过添加
解决了这个问题Realm.getInstance(config)
之后
Realm.setDefaultConfiguration(config);
我们认为配置将在Realm首次调用后设置。这次我们不使用任何Realm对象,所以没有例外。
答案 1 :(得分:2)
如果有人遇到同样的问题,你可以根据Dagger2查看我所做的事情。超级迟到的答案。
首先创建一个模块:
@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();
}
}
它的Context
来自另一个模块
@Module
public class ApplicationModule {
private Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Context provideContext() {
return application;
}
}
这是你的App级别组件:
@Singleton
@Component(modules = {ApplicationModule.class, DatabaseModule.class, NetworkModule.class})
public interface ApplicationComponent {
void inject(HomeActivity activity);
}
最后在你的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);
}
}