如何解决Android 上的 Flutter 领域迁移
我对 Flutter (android) 上的 Realm(https://pub.dev/packages/flutter_realm) 数据库实现有疑问。问题是当我想通过在模型中添加一个字段来迁移数据库时,logcat 上会出现如下错误:
2021-06-06 17:32:35.543 1666-1666/? W/System.err: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.internal.OsSharedRealm.<init>(UnkNown Source:49)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.internal.OsSharedRealm.getInstance(UnkNown Source:13)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.b.<init>(UnkNown Source:88)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.b.<init>(UnkNown Source:4)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.f0.<init>(UnkNown Source:12)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.f0.d0(UnkNown Source:2)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.h0.g(UnkNown Source:142)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.h0.d(UnkNown Source:9)
2021-06-06 17:32:35.543 1666-1666/? W/System.err: at io.realm.f0.g0(UnkNown Source:4)
这是我在 java 中的领域迁移类:
public class RealmMigrations implements RealmMigration {
@Override
public void migrate(DynamicRealm realm,long oldVersion,long newVersion) {
final RealmSchema schema = realm.getSchema();
if (oldVersion == 0) {
final RealmObjectSchema ktpSchema = schema.get("KtpDb");
ktpSchema.addField("umur",int.class);
oldVersion++;
}
if (oldVersion == 1) {
final RealmObjectSchema ktpSchema = schema.get("KtpDb");
ktpSchema.addField("usia",int.class);
oldVersion++;
}
if (oldVersion == 2) {
final RealmObjectSchema ktpSchema = schema.get("KtpDb");
ktpSchema.addField("age",int.class);
oldVersion++;
}
}
}
这是我在java中的Flutter应用程序类:
public class Application extends FlutterApplication {
private Realm realm;
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
final RealmConfiguration configuration = new RealmConfiguration.Builder()
.schemaVersion(3)
.migration(new RealmMigrations())
.build();
Realm.setDefaultConfiguration(configuration);
Realm.getInstance(configuration);
realm.close();
}
}
最后这是我的 AndroidManifest 的样子:
....
<application
android:name=".Application"
android:label="KTP Checker"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singletop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
...
我希望我的解释足够清楚, 谢谢你的问候。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。