【发布时间】:2018-05-16 08:44:40
【问题描述】:
我在 Android 应用程序中使用 Realms 作为数据库。工作正常,但我在我的用户模型中添加了一个新标签,我收到了我需要迁移我的架构的错误:
java.lang.RuntimeException: Unable to create application com.apelucy.apelucy.app.base.MyApplication: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
- Property 'User.testRealm' has been added.
如何进行迁移?我在这里找到了其他解决方案,但我无法在我的代码中实现它们。我无法使用删除和安装应用程序的解决方案。我现在从事开发工作,但我需要更新生产中的应用程序。
我的 UserRespository 类:
public class UserRepository {
private static UserRepository sInstance = null;
private Context mContext = null;
public static UserRepository getInstance(Context context) {
if (sInstance == null) {
sInstance = new UserRepository();
sInstance.mContext = context;
}
return sInstance;
}
// DATABASE Methods
public void storeUser(final User user) {
AppSingleton.getInstance().setUser(user);
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransaction(realm1 -> realm1.insertOrUpdate(user));
} finally {
if (realm != null) {
realm.close();
}
}
}
public User retrieveUser() {
Realm realm = null;
User user = null;
try {
realm = Realm.getDefaultInstance();
User userRealmResult = realm.where(User.class)
.findFirst();
if (userRealmResult != null) {
user = realm.copyFromRealm(userRealmResult);
}
} finally {
if (realm != null) {
realm.close();
}
}
return user;
}
public void clearUser() {
// Clear Database objects
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransaction(realm1 -> realm1.delete(User.class));
} finally {
if (realm != null) {
realm.close();
}
}
}
}
在我的应用程序中初始化领域:
Realm.init(this);
我的模型改变:
@SerializedName("test")
@Expose
private String testRealm;
【问题讨论】:
-
有一个迁移文档realm.io/docs/java/latest/#migrations,它也有一个示例应用程序。你试过了吗?
-
是的,我已经尝试过使用这个文档,但我做不到
-
我认为您应该发布您已经为迁移所做的代码以及您遇到的错误。然后我们可以帮助您更轻松。我很确定遵循文档和示例可以帮助您申请迁移,因为我曾经这样做过
-
实际上,我已经添加了 Eirini 的答案,是的,可以正常工作而不会导致应用程序崩溃。但是,如果可能的话,我也想保留数据
-
是的,有可能github.com/realm/realm-java/blob/master/examples/…。另外我认为总是
deleteRealmIfMigrationNeeded不适合生产应用程序