gpt4 book ai didi

android - 在 Realm 中执行简单的迁移

转载 作者:行者123 更新时间:2023-11-30 01:38:11 24 4
gpt4 key购买 nike

我正在为我的下一个 Android 应用测试 Realm 数据库,我想做一个简单的迁移。我在查看文档时有点困惑。

我有这个简单的类用户:

public class User extends RealmObject {
@PrimaryKey
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

我想(通过迁移)向名为“phoneNumber”的表用户添加一个额外的字段。我不明白如何/在哪里可以启动迁移?我正在像这样在应用程序 onCreate 方法中创建模式:

public class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(0)
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);
}

}

和我的迁移类:

public class MyMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();

// Migrate to version 1: Add a new class.
// Example:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("User")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}

// Migrate to version 2: Add a primary key + object references
// Example:
// public Person extends RealmObject {
// private String name;
// @PrimaryKey
// private int age;
// private Dog favoriteDog;
// private RealmList<Dog> dogs;
// // getters and setters left out for brevity
// }
if (oldVersion == 1) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}

Log.d("MainActivity","Migration happend!");
}

}

最佳答案

试试这个:

public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();

// This is the current schema version before migration.
if (oldVersion == 0) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}

// More migrations (for version 1->2, 2->3, etc..) in the future.
}

然后像下面这样创建RealmConfiguration:

RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(1) // This the expected schema version after migration.
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);

关于android - 在 Realm 中执行简单的迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com