1

I want to import existing token into tokenList as first item , for example if someone has a token="abc" after migration , i want he/she has tokenList that tokenList[0]=="abc"

This is my migration code:

public class RealmMigration implements io.realm.RealmMigration {
.
.
.
    if (oldVersion == 3) {
        final RealmObjectSchema bankSchema = realmSchema.get("Bank");
        final RealmObjectSchema tokenSchema = realmSchema.get("Token");
        DynamicRealmObject bank = realm.createObject("Bank",1);
        Token token = bank.get("Token");
        bankSchema.addRealmListField("tokenList", tokenSchema);
        List<Token> tokenList = bank.get("tokenList");
        if (token != null) tokenList.add(token);
        bankSchema.removeField("Token");
    }
}

I replace this in new version :

@RealmField(name = "tokenList")
private RealmList<Token> mTokenList;

With this in old version in my class :

@RealmField(name = "Token")
private Token mToken;
2
  • So what doesn't work? Is there an exception, etc? Did you update the schema version number to trigger the migration? Commented Jan 25, 2020 at 8:40
  • Yes i update it , migration is well but app crash when i install new version on old version because i cant insert existing token(old field in Bank) into tokenList(new field in Bank) .java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 because bankList not filled in migration. Commented Jan 25, 2020 at 8:51

1 Answer 1

1

I created new issue in Realm GitHub then i found right way for transform object to list[object] in Realm and insert existing object from previous version to new version of application.

In this example we want to transform Token object to tokenList[Token] in Bank model.

In last version of migration put this :

public class RealmMigration implements io.realm.RealmMigration {

.

.

.

        if (oldVersion == 3) {
            //Create a schema for Bank
            final RealmObjectSchema bankSchema = realmSchema.get("Bank");
            //Create a schema for Token that has been in Bank model
            final RealmObjectSchema tokenSchema = realmSchema.get("Token");
            //We use bankSchema for add tokenList field and transform
            bankSchema
                .addRealmListField("tokenList", tokenSchema)
                .transform((obj) -> {//obj is bank model,we have a transform in bank model
                         DynamicRealmObject token = obj.get("Token");
                         List<DynamicRealmObject> tokenList = obj.get("tokenList");
                                //We add token from pre version to tokenList in new version
                                if (token != null) tokenList.add(token);
                            }
                    )
                    //Finally remove unwanted field
                    .removeField("Token");
        }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.