【问题标题】:How to debug RealmMigrationNeededException on Android?如何在 Android 上调试 RealmMigrationNeededException?
【发布时间】:2016-03-31 10:14:11
【问题描述】:

我在我的 android 项目中使用领域数据库。

我已在我的领域数据库中添加了一个新列,该列是从 CSV 生成的,并在我的实体文件中执行了相同的操作。

但是,如果我启动我的应用程序,我现在会收到一个RealmMigrationNeededException,尽管我之前已经卸载了它。所以看起来我生成的数据库和实体文件不匹配。

我想知道是否有可能找出导致异常的确切原因。我在 Android Studio 中获得的堆栈跟踪不包含任何可能帮助我解决问题的线索

FATAL EXCEPTION: main
Process: de.myCompany.myApp, PID: 5270
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 (has extras) } in de.myCompany.myApp.helper.WifiReceiver@2d683f50
     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:872)
     at android.os.Handler.handleCallback(Handler.java:739)
     at android.os.Handler.dispatchMessage(Handler.java:95)
     at android.os.Looper.loop(Looper.java:135)
     at android.app.ActivityThread.main(ActivityThread.java:5254)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: io.realm.exceptions.RealmMigrationNeededException: RealmMigration must be provided
     at io.realm.BaseRealm.migrateRealm(BaseRealm.java:589)
     at io.realm.Realm.migrateRealm(Realm.java:1224)
     at io.realm.Realm.migrateRealm(Realm.java:1213)
     at io.realm.Realm.createInstance(Realm.java:237)
     at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:114)
     at io.realm.Realm.getInstance(Realm.java:197)
     at de.myCompany.myApp.ImageDownloadController.fillDownloadStack(ImageDownloadController.java:94)
     at de.myCompany.myApp.ImageDownloadController.<init>(ImageDownloadController.java:37)
     at de.myCompany.myApp.ImageDownloadController.getInstance(ImageDownloadController.java:42)
     at de.myCompany.myApp.helper.WifiReceiver.onReceive(WifiReceiver.java:30)
     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:862)
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

除了反复试验之外,还有什么合适的方法可以调试RealmMigrationNeededException

【问题讨论】:

  • 尝试将一个空的RealmMigration 添加到您的RealmConfiguration。然后它应该会在之后向您显示根本原因。
  • @ChristianMelchior 成功了。如果您愿意,可以发布答案。否则我会做的。

标签: android android-studio realm


【解决方案1】:

如果发生RealmMigrationExceptionNeeded 错误,Realm 会自动尝试触发任何已配置的迁移来修复它。如果不存在这样的RealmMigration,您将获得另一个覆盖根本原因的RealmMigrationNeededException

解决方法是只提供一个虚拟 RealmMigration 来查看真正的错误。

我明白为什么它会有点令人困惑,我们可能应该考虑抛出一个更好的异常消息,其中也包括根本原因。

【讨论】:

  • 是的,你应该这样做。 :) 也感谢 Realm。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多