问题
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;
回答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");
}
}
来源:https://stackoverflow.com/questions/59855380/transform-object-to-listobject-in-realm-how-can-i-replace-a-listobjects-wi