繁体   English   中英

附带.realm文件的Android应用程序,并将其用作默认数据库

[英]shipping Android app with a .realm file and use it as a default database

我的“ assets / default.realm ”文件夹中有一个default.realm文件,我无法将其设置为默认领域数据库

realm.getDefaultInstance();
        src= new File("assets/default.realm");
        dst=new File("/data/data/" + context.getPackageName() + "/files/");
        if (!(realm.isEmpty())) {
            Log.v("DB","already there!!");
        } else {
            try {
                copyFile(src,dst);
            } catch (IOException e) {
                Log.v("DB","Wrong Path!");
            }
        }
void copyFile(File src, File dst) throws IOException {
        FileChannel inChannel = new FileInputStream(src).getChannel();
        FileChannel outChannel = new FileOutputStream(dst).getChannel();
        try {
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } finally {
            if (inChannel != null)
                inChannel.close();
            if (outChannel != null)
                outChannel.close();
        }
    }

但未能复制,请帮助

您可以将其添加到RealmConfiguration ,而不是手动复制Realm文件: https : RealmConfiguration 。上下文-java.lang.String-

您的Realm文件可能与您的类不同,并且将引发MigrationIsNeeded异常。 在这种情况下,您将必须编写一个迁移步骤: https : //realm.io/docs/java/latest/#migrations

因此,您将得到类似以下内容的结果:

RealmMigration migration = new RealmMigration() {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();
        if (oldVersion == 0) {
            schema.create("Person")
                .addField("name", String.class)
                .addField("age", int.class);
            oldVersion++;
        }
    }
};

RealmConfiguration config = new RealmConfiguration.B‌​uilder(this)
  .name(Realm.DEFAULT_‌​REALM_NAME)
  .migration(migration)
  .assetFile(this,"Def‌​ault.realm")
  .schemaVersion(1)
  .build(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM