2016-01-23 25 views
2

我们处于开发阶段并且db架构更改经常发生。由于我们没有生活,所以不需要迁移。我为此配置的领域如下:如果需要迁移,则领域不会自动删除数据库

RealmConfiguration config = new RealmConfiguration.Builder(context) 
       .name("jt.realm") 
       .schemaVersion(1) 
       .deleteRealmIfMigrationNeeded() // todo remove for production 
       .build(); 
     Realm.setDefaultConfiguration(config); 

然而,当模式改变时,会抛出异常:RealmMigration must be provided

我从文档的理解是,该领域应自动删除该数据库自deleteRealmIfMigrationNeeded( )存在于配置中,但这似乎没有发生。为什么会发生?

Android Studio中依赖

编译 'io.realm:境界 - 安卓:0.86.1'

+0

我们不能产生这个问题。你有多个Realm,有可能是在其他地方抛出异常? – beeender

+0

@beeender我只是在启动时在1个地方创建默认配置 – RunLoop

+0

你能在adb日志中看到类似'无法删除文件'的东西吗? – beeender

回答

2

我们也有类似的问题。我们经过

Realm.setDefaultConfiguration(config); 

正确的解决了这个加入

Realm.getInstance(config) 

我们认为配置将设立境界被称为第一时间之后。这次我们不使用任何Realm对象,所以没有例外。

1

超级迟来的答案,以防万一任何人有同样的问题,你可以看看我根据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; 
    } 
} 

这是你应用程序级组件正在添加:

@Singleton 
@Component(modules = {ApplicationModule.class, DatabaseModule.class, NetworkModule.class}) 
public interface ApplicationComponent { 

    void inject(HomeActivity activity); 
} 

最后在活动中使用它/片段:

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); 
    } 
} 
相关问题