微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 上的 Flutter 领域迁移

如何解决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 举报,一经查实,本站将立刻删除。