0
我做了一些migration
realm
在Android Studio模擬器上測試並沒有問題,但在production
某些設備正在遷移trouble
。更新應用程序領域遷移問題
在1版本:
public class Configuration extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration configuration = new RealmConfiguration.Builder()
.name("myapp.realm").schemaVersion(1).build();
Realm.setDefaultConfiguration(configuration);
}
}
在版本2中:
public class Configuration extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration configuration = new RealmConfiguration.Builder()
.name("myapp.realm").schemaVersion(2).migration(new MyMigration()).build();
Realm.setDefaultConfiguration(configuration);
}
private class MyMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 1) {
schema.get(ClassRealm.class.getSimpleName())
.addField(ClassRealm.STRING_FIELD_NAME, String.class);
schema.create(AnotherClassRealm.class.getSimpleName())
.addField(AnotherClassRealm.INTEGER_FIELD_NAME, Integer.class, FieldAttribute.PRIMARY_KEY)
.addField(AnotherClassRealm.STRING_FIELD1_NAME, String.class, FieldAttribute.REQUIRED)
.addField(AnotherClassRealm.STRING_FIELD2_NAME, String.class, FieldAttribute.REQUIRED)
.addField(AnotherClassRealm.DATE_FIELD_NAME, Date.class, FieldAttribute.REQUIRED);
oldVersion++;
}
}
}
}
升級到新的版本錯誤後:
裝置:銀河J5(j5lte) 機器人: 6.0
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'io.realm.RealmObjectSchema io.realm.RealmObjectSchema.a(java.lang.String, java.lang.Class, io.realm.e[])' on a null object reference
at myapp.configuration.Configuration$MyMigration.migrate(Configuration.java)
at io.realm.BaseRealm$4.onResult(BaseRealm.java)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java)
at <OR>.release(RealmCache.java)
at <OR>.validateConfiguration(RealmCache.java)
at <OR>.invokeWithGlobalRefCount(RealmCache.java)
at <OR>.updateSchemaCache(RealmCache.java)
at <OR>.findColumnIndices(RealmCache.java)
at <OR>.storeColumnIndices(RealmCache.java)
at io.realm.BaseRealm.isInTransaction(BaseRealm.java)
at <OR>.setVersion(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.deleteRealm(BaseRealm.java)
at <OR>.migrateRealm(BaseRealm.java)
at io.realm.Realm.init(Realm.java)
at <OR>.createInstance(Realm.java)
at <OR>.initializeRealm(Realm.java)
at <OR>.createObject(Realm.java)
at <OR>.createObjectInternal(Realm.java)
at <OR>.copyToRealm(Realm.java)
at <OR>.copyFromRealm(Realm.java)
at <OR>.where(Realm.java)
at <OR>.executeTransaction(Realm.java)
at <OR>.copyOrUpdate(Realm.java)
at <OR>.createDetachedCopy(Realm.java)
at <OR>.checkMaxDepth(Realm.java)
at <OR>.migrateRealm(Realm.java)
at <OR>.updateSchemaCache(Realm.java)
at <OR>.isInTransaction(Realm.java)
at io.realm.Realm.init(Realm.java)
at <OR>.createInstance(Realm.java)
at <OR>.initializeRealm(Realm.java)
at <OR>.createObject(Realm.java)
at <OR>.createObjectInternal(Realm.java)
at <OR>.copyToRealm(Realm.java)
at <OR>.copyFromRealm(Realm.java)
at <OR>.where(Realm.java)
at <OR>.executeTransaction(Realm.java)
at <OR>.copyOrUpdate(Realm.java)
at <OR>.createDetachedCopy(Realm.java)
at <OR>.checkMaxDepth(Realm.java)
at <OR>.migrateRealm(Realm.java)
at <OR>.updateSchemaCache(Realm.java)
at <OR>.isInTransaction(Realm.java)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java)
at <OR>.release(RealmCache.java)
at <OR>.validateConfiguration(RealmCache.java)
at <OR>.invokeWithGlobalRefCount(RealmCache.java)
at <OR>.updateSchemaCache(RealmCache.java)
at <OR>.findColumnIndices(RealmCache.java)
at <OR>.storeColumnIndices(RealmCache.java)
at io.realm.Realm.getDefaultInstance(Realm.java)
at myapp.MyView.onCreate(MyView.java)
at android.app.Activity.performCreate(Activity.java:6904)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
另: 裝置:銀河S3理學(s3ve3gds),機器人:4.4
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.access$900(ActivityThread.java:171)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5679)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
at myapp.configuration.Configuration$MyMigration.migrate(Configuration.java)
at io.realm.BaseRealm$4.onResult(BaseRealm.java)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java)
at <OR>.release(RealmCache.java)
at <OR>.validateConfiguration(RealmCache.java)
at <OR>.invokeWithGlobalRefCount(RealmCache.java)
at <OR>.updateSchemaCache(RealmCache.java)
at <OR>.findColumnIndices(RealmCache.java)
at <OR>.storeColumnIndices(RealmCache.java)
at io.realm.BaseRealm.isInTransaction(BaseRealm.java)
at <OR>.setVersion(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.get(BaseRealm.java)
at <OR>.deleteRealm(BaseRealm.java)
at <OR>.migrateRealm(BaseRealm.java)
at io.realm.Realm.init(Realm.java)
at <OR>.createInstance(Realm.java)
at <OR>.initializeRealm(Realm.java)
at <OR>.createObject(Realm.java)
at <OR>.createObjectInternal(Realm.java)
at <OR>.copyToRealm(Realm.java)
at <OR>.copyFromRealm(Realm.java)
at <OR>.where(Realm.java)
at <OR>.executeTransaction(Realm.java)
at <OR>.copyOrUpdate(Realm.java)
at <OR>.createDetachedCopy(Realm.java)
at <OR>.checkMaxDepth(Realm.java)
at <OR>.migrateRealm(Realm.java)
at <OR>.updateSchemaCache(Realm.java)
at <OR>.isInTransaction(Realm.java)
at io.realm.Realm.init(Realm.java)
at <OR>.createInstance(Realm.java)
at <OR>.initializeRealm(Realm.java)
at <OR>.createObject(Realm.java)
at <OR>.createObjectInternal(Realm.java)
at <OR>.copyToRealm(Realm.java)
at <OR>.copyFromRealm(Realm.java)
at <OR>.where(Realm.java)
at <OR>.executeTransaction(Realm.java)
at <OR>.copyOrUpdate(Realm.java)
at <OR>.createDetachedCopy(Realm.java)
at <OR>.checkMaxDepth(Realm.java)
at <OR>.migrateRealm(Realm.java)
at <OR>.updateSchemaCache(Realm.java)
at <OR>.isInTransaction(Realm.java)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java)
at <OR>.release(RealmCache.java)
at <OR>.validateConfiguration(RealmCache.java)
at <OR>.invokeWithGlobalRefCount(RealmCache.java)
at <OR>.updateSchemaCache(RealmCache.java)
at <OR>.findColumnIndices(RealmCache.java)
at <OR>.storeColumnIndices(RealmCache.java)
at io.realm.Realm.getDefaultInstance(Realm.java)
at myapp.MyView.onCreate(MyView.java)
at android.app.Activity.performCreate(Activity.java:5582)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)
at android.app.ActivityThread.access$900(ActivityThread.java:171)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5679)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(NativeStart.java)
所有設備:
- 銀河大理學(baffinlitedtv)
- 銀河Tab3V 7.0(goyave3gsea)
- 銀河S7邊緣(hero2lte)
- 銀河J5(2016)(j5xnlte)
- 摩托G(4)P桿菌屬(athene_f)
- 銀河J1贈送(j1mini3g)
- 銀河WIN2(coreprimeltedtv)
- 聯想K5(A6020l36)
- Moto G的Turbo版(梅林)
- 摩托G4播放(harpia_t)
- 銀河S3理學(s3ve3gds)
- STUDIO_SELFIE
- 銀河核2(假名)
- 銀河J2(j2lte)
- 銀河大總理(fortuna3gdtv)
- 銀河J3(2016)(j3xlte)
請您分享完整的堆棧跟蹤? – beeender
和遷移失敗的設備? – EpicPandaForce
我使用所需的更改進行了編輯。 – k4k4sh1