Search code examples
androidrealm

Realm Data is not persisting between sessions


I have a realm file that is in my resource raw folder. I am able to read objects, alter them, and save them for that session. But when I start a new session the data does not reflect any of my changes. I am not calling Realm.deleteRealmFile() or Realm.clear() at any point.

public class MyDb {

private Realm realm;
private RealmConfiguration config0;
private Context context;

public MyDb(Context context) {
    this.context = context;

    copyBundledRealmFile(context.getResources().openRawResource(R.raw.default0),"default0");
    config0 = new RealmConfiguration.Builder(context)
            .name("default0")
            .build();

    realm = Realm.getInstance(config0);
}


private String copyBundledRealmFile(InputStream inputStream, String outFileName) {
    try {
        File file = new File(context.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;
}

public void saveResource(final Resource resourceIn) {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            resourceIn.setSaved(true);
        }
    });
}

public void unSaveResource(final Resource resourceIn) {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            resourceIn.setSaved(false);
        }
    });
}

}


Solution

  • That's probably because you're overwriting your Realm with the "default0" realm from your raw resources each time you start the app.

    I recommend using assetFile() parameter, it's what it's for.