Realm to Json & Royal
-
Upload
leonardo-taehwan-kim -
Category
Engineering
-
view
73 -
download
5
Transcript of Realm to Json & Royal
Realm + JsonThe Finest Artist
RealmRealmObject
RealmObjectProxy
RealmList
RealmResult
RealmChangeListener
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) { /* ... */ } }
RealmObjectProxypublic interface RealmObjectProxy { }
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) { /* ... */ }
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() { /* ... */ } }
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) { /* ... */ } }
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) { /* ... */ } }
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();
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) { /*...*/}
RealmObject to JsonStringMoshi (Square) Gson (Google)
Jackson (FasterXML) JsonPullParser (Vvakame) Serialize (Cmelchior/Gist)
Rson (TheFinestArtist) http://www.slideshare.net/TheFinestArtist/realm-51344456
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));
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 []
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
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”})
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!!
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" }
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; } }
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" }
Rson
Rson.toJsonString(RealmObject object);
Rson.toJsonString(RealmObject object, int depth);
Royalhttps://github.com/TheFinestArtist/Royal-Android
RoyalRoyal
RoyalDatabase
RoyalTransaction
RoyalExport
Rson
Dependenciesdependencies { compile 'com.thefinestartist:royal:0.82.0.6' }
Dependenciesdependencies { compile 'com.thefinestartist:royal:0.82.0.6' }
public class App extends Application {
@Override public void onCreate() { super.onCreate(); Royal.joinWith(this); } }
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(); } }
RoyalDatabasepublic class App extends Application {
@Override public void onCreate() { super.onCreate(); Royal.joinWith(this); Royal.addDatabase(new SecondaryDatabase()); } }
RealmConfiguration configuration = Royal.getConfigurationOf(SecondaryDatabase.class);
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);
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);
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();
Rson
Rson.toJsonString(RealmObject object);
Rson.toJsonString(RealmObject object, int depth);
Thank You :)