我正在尝试从 / res / raw 文件夹加载域数据库文件,但是我收到错误。
io.realm.exceptions.RealmMigrationNeededException: RealmMigration must be provided
使用以下代码:
private void loadRealmDB() {
RealmConfiguration configuration = new RealmConfiguration
.Builder(getApplicationContext())
.name(REALM_DATABASE_NAME)
.schemaVersion(0)
.build();
Realm.deleteRealm(configuration);
Realm.getInstance(configuration).close();
loadRealmFromRawFile(this.getResources().openRawResource(R.raw.default0), REALM_DATABASE_NAME);
// You can then manually call Realm.migrateRealm().
try {
Realm.migrateRealm(configuration, new RealmMigration() {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
oldVersion++;
}
});
} catch (FileNotFoundException ignored) {
// If the Realm file doesn't exist, just ignore.
Log.wtf(TAG, "Error migration");
}
Realm realm = Realm.getInstance(configuration);
Log.wtf(TAG, "->>PData size: " + realm.where(PData.class).findAll().size());
Log.wtf(TAG, "->>SData size: " + realm.where(SData.class).findAll().size());
}
public void loadRealmFromRawFile(InputStream inputStream, String fileName) {
long startTime,endTime,resultTime;
//start time
startTime = System.currentTimeMillis();
try {
File file = new File(getApplicationContext().getFilesDir(), fileName);
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();
} catch (IOException e) {
e.printStackTrace();
}
//end time
endTime = System.currentTimeMillis();
resultTime = endTime - startTime;
Log.wtf(TAG, "Bundling realm from R.res.raw: " + resultTime);
}
在其他测试项目中,此代码有效!可能是什么问题?
如果我不需要,我如何跳过迁移?