android - 将数据预填充到 Assets 中的 Realm ?

标签 android realm

通常我将 Realm 用作:

RealmConfiguration config = new RealmConfiguration.Builder(applicationContext).deleteRealmIfMigrationNeeded().build();

如何将包含数据的数据库添加到项目的 Assets 文件夹并读取它?

最佳答案

自 Realm Java 0.91.0 以来,RealmConfiguration 上有一个 assetFile(String) 选项,它会自动从 Assets 中复制文件并在需要时使用该文件(例如如果 Realm 是第一次打开或由于某种原因已被删除):

RealmConfiguration config = new RealmConfiguration.Builder()
  .assetFile("path/to/file/in/assets") // e.g "default.realm" or "lib/data.realm"
  .deleteRealmIfMigrationNeeded()
  .build()

上面的代码会在第一次打开 Realm 时从 Assets 中复制文件,或者如果它由于迁移而被删除(请记住在这种情况下更新 Assets Realm)。


旧答案:

可以在 assets 文件夹中 bundle 一个 Realm 数据库,但是您只需在第一次启动应用程序时从那里复制它即可。

我们有一个如何复制文件的例子:https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/MigrationExampleActivity.java#L101-Lundefined

copyBundledRealmFile(this.getResources().openRawResource(R.raw.default_realm), "default.realm");

private String copyBundledRealmFile(InputStream inputStream, String outFileName) {
    try {
        File file = new File(this.getFilesDir(), outFileName);
        FileOutputStream outputStream = new FileOutputStream(file);
        byte[] buf = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buf)) > 0) {
            outputStream.write(buf, 0, bytesRead);
        }
        outputStream.close();
        return file.getAbsolutePath();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

关于android - 将数据预填充到 Assets 中的 Realm ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33674982/

相关文章:

swift - 变量重置为 Realm 中的默认值

java - 改造错误 JSONSyntaxException

android - Gradle 构建在全新安装和空项目上永远运行

android - 应用程序小部件中的 setShadowLayer?

android - Gradle插件版本与Real Gradle版本Android Studio冲突

ios - 尝试解开 Realm 对象时出错

android - Ionic/Cordova应用程序可在模拟器中播放声音,但不能在Android设备上播放

java - Android 启动时崩溃 : Styling the ActionBar Theme App. 兼容

ios - 具有非标准化数据的 Realm 迁移

java - authc 过滤器未使用 spring 在 shiro 中调用 MyRealm