Realm to Json & Royal

33
Realm + Json The Finest Artist

Transcript of Realm to Json & Royal

Page 1: Realm to Json & Royal

Realm + JsonThe Finest Artist

Page 2: Realm to Json & Royal

RealmRealmObject

RealmObjectProxy

RealmList

RealmResult

RealmChangeListener

Page 3: Realm to Json & Royal

RealmObjectpublic abstract class RealmObject { protected Row row; protected Realm realm;

public void removeFromRealm() { /* ... */ } public boolean isValid() { /* ... */ } protected static Realm getRealm(RealmObject obj) { /* ... */ } protected static Row getRow(RealmObject obj) { /* ... */ } }

Page 4: Realm to Json & Royal

RealmObjectProxypublic interface RealmObjectProxy { }

Page 5: Realm to Json & Royal

RealmListpublic class RealmList<E extends RealmObject> extends AbstractList<E> {

private final boolean managedMode; private Class<E> clazz; private LinkView view; private Realm realm; private List<E> nonManagedList;

public RealmList() { /* ... */ } public RealmList(E... objects) { /* ... */ }

RealmList(Class<E> clazz, LinkView view, Realm realm) { /* ... */ } @Override public void add(int location, E object) { /* ... */ } @Override public boolean add(E object) { /* ... */ } @Override public E set(int location, E object) { /* ... */ }

Page 6: Realm to Json & Royal

RealmList private E copyToRealmIfNeeded(E object) { /* ... */ } public void move(int oldPos, int newPos) { /* ... */ } @Override public void clear() { /* ... */ } @Override public E remove(int location) { /* ... */ } @Override public E get(int location) { /* ... */ } public E first() { /* ... */ } public E last() { /* ... */ } @Override public int size() { /* ... */ } public RealmQuery<E> where() { /* ... */ }

private void checkValidObject(E object) { /* ... */ } private void checkIndex(int location) { /* ... */ }

@Override public String toString() { /* ... */ } }

Page 7: Realm to Json & Royal

Ownerpublic class Owner extends RealmObject {

private String name; private RealmList<Dog> dogs; private Cat cat;

public Cat getCat() { /* ... */ } public void setCat(Cat cat) { /* ... */ } public RealmList<Dog> getDogs() { /* ... */ } public void setDogs(RealmList<Dog> dogs) { /* ... */ } public String getName() { /* ... */ } public void setName(String name) { /* ... */ } }

Page 8: Realm to Json & Royal

OwnerRealmProxypublic class OwnerRealmProxy extends Owner implements RealmObjectProxy {

private static long INDEX_NAME; private static long INDEX_DOGS; private static long INDEX_CAT; private static final List<String> FIELD_NAMES;

@Override public String getName() { /* ... */ } @Override public void setName(String value) { /* ... */ } @Override public RealmList<Dog> getDogs() { /* ... */ } @Override public void setDogs(RealmList<Dog> value) { /* ... */ } @Override public Cat getCat() { /* ... */ } @Override public void setCat(Cat value) { /* ... */ } }

Page 9: Realm to Json & Royal

When?realm.beginTransaction(); { Owner owner = new Owner(); owner.setName("Leonardo"); } realm.commitTransaction();

Owner owner = new Owner(); owner.setName("Leonardo"); realm.beginTransaction(); { Owner ownerProxy = realm.copyToRealm(owner); } realm.commitTransaction();

Page 10: Realm to Json & Royal

JsonString to RealmObjectpublic <E extends RealmObject> void createAllFromJson(Class<E> clazz, JSONArray json) { /*...*/ }

public <E extends RealmObject> void createOrUpdateAllFromJson(Class<E> clazz, JSONArray json) { /*...*/ }

public <E extends RealmObject> void createAllFromJson(Class<E> clazz, String json) { /*...*/ }

public <E extends RealmObject> void createOrUpdateAllFromJson(Class<E> clazz, String json) { /*...*/}

public <E extends RealmObject> E createObjectFromJson(Class<E> clazz, JSONObject json) { /*...*/ }

public <E extends RealmObject> E createOrUpdateObjectFromJson(Class<E> clazz, JSONObject json) { /*…*/ }

public <E extends RealmObject> E createObjectFromJson(Class<E> clazz, String json) { /*...*/ }

public <E extends RealmObject> E createOrUpdateObjectFromJson(Class<E> clazz, String json) { /*...*/}

Page 11: Realm to Json & Royal

RealmObject to JsonStringMoshi (Square) Gson (Google)

Jackson (FasterXML) JsonPullParser (Vvakame) Serialize (Cmelchior/Gist)

Rson (TheFinestArtist) http://www.slideshare.net/TheFinestArtist/realm-51344456

Page 12: Realm to Json & Royal

RealmObject & ProxyObjectAllTypes allTypes; Logger.d("Gson(Realm Object)"); Logger.json(gson.toJson(allTypes));

realm.beginTransaction(); AllTypes allTypesProxy = realm.copyToRealm(allTypes); realm.commitTransaction(); Logger.d("Gson(Proxy Object)"); Logger.json(gson.toJson(allTypesProxy));

Page 13: Realm to Json & Royal

MoshiMoshi moshi = new Moshi.Builder() .add(new MoshiDateAdapter()) .build(); JsonAdapter<AllTypes> adapter = moshi.adapter(AllTypes.class);

// No JsonAdapter for java.lang.Class<com.thefinestartist.realm.json.models.Dog> annotated []

Page 14: Realm to Json & Royal

GsonRealmObject

{ "columnBinary": [ 0, 1, 2, 3, 4, 5, 6, 7 ], "columnBoolean": true, "columnDate": "Aug 5, 2015 8:30:55 PM", "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnString": "allType" }

ProxyObject

{ "columnBoolean": true, "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123 }

Doesn’t work for ProxyObject

Page 15: Realm to Json & Royal

JacksonRealmObject

{ "columnBinary": "AAECAwQFBgc=", "columnBoolean": true, "columnDate": 1438821055494, "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnRealmList": null, "columnRealmObject": null, "columnString": "allType" }

ProxyObject

{ "columnBinary": "AAECAwQFBgc=", "columnBoolean": true, "columnDate": 1438821055000, "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnRealmList": [], "columnRealmObject": null, "columnString": "allType" }

@JsonIgnoreProperties({“valid”})

Page 16: Realm to Json & Royal

Json Pull ParserRealmObject

{ "columnString": "allType", "columnLong": 123, "columnFloat": 12.3, "columnDouble": 1.23, "columnBoolean": true, "columnDate": 1438821055494, "columnRealmObject": null }

ProxyObject

{ "columnString": "allType", "columnLong": 123, "columnFloat": 12.3, "columnDouble": 1.23, "columnBoolean": true, "columnDate": 1438821055000, "columnRealmObject": null }

Doesn’t work for RealmList!!

Page 17: Realm to Json & Royal

SerializeRealmObject

{ "columnBinary": [ 0, 1, 2, 3, 4, 5, 6, 7 ], "columnBoolean": true, "columnDate": "Aug 5, 2015 8:30:55 PM", "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnString": "allType" }

ProxyObject

{ "columnBinary": [ 0, 1, 2, 3, 4, 5, 6, 7 ], "columnBoolean": true, "columnDate": "Aug 5, 2015 8:30:55 PM", "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnString": "allType" }

Page 18: Realm to Json & Royal

Serializepublic class AllTypesSerializer implements JsonSerializer<AllTypes> { @Override public JsonElement serialize(AllTypes src, Type typeOfSrc, JsonSerializationContext context) { final JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("columnString", src.getColumnString()); jsonObject.addProperty("columnLong", src.getColumnLong()); jsonObject.addProperty("columnFloat", src.getColumnFloat()); jsonObject.addProperty("columnDouble", src.getColumnDouble()); jsonObject.addProperty("columnBoolean", src.isColumnBoolean()); jsonObject.addProperty("columnDate", DateUtil.getDateFormat(src.getColumnDate())); jsonObject.add("columnBinary", context.serialize(src.getColumnBinary())); jsonObject.add("columnRealmObject", context.serialize(src.getColumnRealmObject())); jsonObject.add("columnRealmList", context.serialize(src.getColumnRealmList())); return jsonObject; } }

Page 19: Realm to Json & Royal

RsonRealmObject

{ "columnBinary": [ 0, 1, 2, 3, 4, 5, 6, 7 ], "columnBoolean": true, "columnDate": "Aug 5, 2015 8:30:55 PM", "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnString": "allType" }

ProxyObject

{ "columnBinary": [ 0, 1, 2, 3, 4, 5, 6, 7 ], "columnBoolean": true, "columnDate": "Aug 5, 2015 8:30:55 PM", "columnDouble": 1.23, "columnFloat": 12.3, "columnLong": 123, "columnString": "allType" }

Page 20: Realm to Json & Royal

Rson

Rson.toJsonString(RealmObject object);

Rson.toJsonString(RealmObject object, int depth);

Page 21: Realm to Json & Royal

Royalhttps://github.com/TheFinestArtist/Royal-Android

Page 22: Realm to Json & Royal

RoyalRoyal

RoyalDatabase

RoyalTransaction

RoyalExport

Rson

Page 23: Realm to Json & Royal

Dependenciesdependencies { compile 'com.thefinestartist:royal:0.82.0.6' }

Page 24: Realm to Json & Royal

Dependenciesdependencies { compile 'com.thefinestartist:royal:0.82.0.6' }

public class App extends Application {

@Override public void onCreate() { super.onCreate(); Royal.joinWith(this); } }

Page 25: Realm to Json & Royal

RoyalDatabasepublic class SecondaryDatabase extends RoyalDatabase {

public String getFileName() { return "secondary"; }

public boolean forCache() { return false; }

public byte[] getEncryptionKey() { return null; }

public int getVersion() { return 0; }

public boolean shouldDeleteIfMigrationNeeded() { return false; }

public Set<Object> getModules() { Set<Object> set = new HashSet<>(); set.add(new SecondaryModule()); return set; }

@Override public long execute(Realm realm, long version) { return getVersion(); } }

Page 26: Realm to Json & Royal

RoyalDatabasepublic class App extends Application {

@Override public void onCreate() { super.onCreate(); Royal.joinWith(this); Royal.addDatabase(new SecondaryDatabase()); } }

RealmConfiguration configuration = Royal.getConfigurationOf(SecondaryDatabase.class);

Page 27: Realm to Json & Royal

RoyalTransaction// RealmList, RealmResults, RealmObject, List<? extends RealmObject> RoyalTransaction.create(Class<? extends RoyalDatabase> clazz, Object... objects); RoyalTransaction.create(RealmConfiguration configuration, Object... objects); RoyalTransaction.create(Realm realm, Object... objects);

RoyalTransaction.save(Class<? extends RoyalDatabase> clazz, Object... objects); RoyalTransaction.save(RealmConfiguration configuration, Object... objects); RoyalTransaction.save(Realm realm, Object... objects);

RoyalTransaction.delete(Class<? extends RoyalDatabase> clazz, Object... objects); RoyalTransaction.delete(RealmConfiguration configuration, Object... objects); RoyalTransaction.delete(Realm realm, Object... objects);

Page 28: Realm to Json & Royal

RoyalTransactionUser user1 = new User(); user1.setName("Leonardo Taehwan Kim"); user1.setEmail("[email protected]"); user1.setUsername("TheFinestArtist");

User user2 = new User(); user2.setName("Leonardo Taehwan Kim"); user2.setEmail("[email protected]"); user2.setUsername("TheFinestArtist");

RoyalTransaction.save(realm, user1, user2); RoyalTransaction.save(RealmDatabase.class, user1, user2);

Page 29: Realm to Json & Royal

RoyalExportRoyalExport.toEmail(Class<? extends RoyalDatabase>... clazzes); RoyalExport.toEmail(String email, Class<? extends RoyalDatabase>... clazzes); RoyalExport.toEmail(String email, Intent intent, Class<? extends RoyalDatabase>... clazzes);

RoyalExport.toEmail(RealmConfiguration... configurations); RoyalExport.toEmail(String email, RealmConfiguration... configurations); RoyalExport.toEmail(String email, Intent intent, RealmConfiguration... configurations);

RoyalExport.toEmail(Realm... realms); RoyalExport.toEmail(String email, Realm... realms); RoyalExport.toEmail(String email, Intent intent, Realm... realms);

RoyalExport.toEmailAsRawFile(); RoyalExport.toEmailAsRawFile(String email); RoyalExport.toEmailAsRawFile(String email, Intent intent);

RoyalExport.toExternalStorage(Class<? extends RoyalDatabase>... clazzes) RoyalExport.toExternalStorage(RealmConfiguration... configurations); RoyalExport.toExternalStorage(Realm... realms); RoyalExport.toExternalStorageAsRawFile();

Page 30: Realm to Json & Royal

Rson

Rson.toJsonString(RealmObject object);

Rson.toJsonString(RealmObject object, int depth);

Page 31: Realm to Json & Royal
Page 32: Realm to Json & Royal
Page 33: Realm to Json & Royal

Thank You :)