Slide 1

Slide 1 text

Realm with ContentProvider Realm meetup #2

Slide 2

Slide 2 text

About me 4 Լ઒ ܟ߂ (@androhi) 4 גࣜձࣾZaim (AndroidΞϓϦ୲౰) 4 DroidKaigiͰൃද͠·͢ 4 JellyBeanͱKitKatͰ࣮ݱ͢ΔϚςϦΞϧσβΠϯ

Slide 3

Slide 3 text

Tried ContentProviderͰΞΫηε͢ΔDBΛɺRealmʹͯ͠Έ·͠ ͨ Reason AndroidͷSyncAdapterΛ࢖ͬͨࣗಈಉظͷ࢓૊ΈͰ͸ɺό οΫάϥ΢ϯυͰಉظॲཧΛ͢ΔࡍʹContentProviderΛ༻ ͍Δͱ͍͏ϧʔϧ͕͋ΔͨΊ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Extend ContentProvider 1. Queryϝιουͷ࣮૷ (+ ಠࣗCursorͷੜ੒) 2. Insertϝιουͷ࣮૷ 3. Updateϝιουͷ࣮૷ 4. Deleteϝιουͷ࣮૷ 5. BulkInsertϝιουͷ࣮૷

Slide 6

Slide 6 text

This time 1. Queryϝιουͷ࣮૷ (+ ಠࣗCursorͷੜ੒) 2. Insertϝιουͷ࣮૷ 3. Updateϝιουͷ࣮૷ 4. Deleteϝιουͷ࣮૷ 5. BulkInsertϝιουͷ࣮૷

Slide 7

Slide 7 text

1-1. Create cursor static final String[] sColumns = new String[] {"_id", "name", "price"}; RealmQuery query = mRealm.where(Item.class); RealmResults results = query.findAll(); MatrixCursor matrixCursor = new MatrixCursor(sColumns); for (Item item : results) { Object[] rowData = new Object[]{item.get_id(), item.getName(), item.getPrice()}; matrixCursor.addRow(rowData); }

Slide 8

Slide 8 text

1-2. Implement query @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { ... RealmQuery query = mRealm.where(Item.class); RealmResults results = query.findAll(); MatrixCursor matrixCursor = new MatrixCursor(sColumns); for (Item item : results) { Object[] rowData = new Object[]{item.get_id(), item.getName(), item.getPrice()}; matrixCursor.addRow(rowData); } return matrixCursor; }

Slide 9

Slide 9 text

2. Implement insert @Override public Uri insert(Uri uri, ContentValues contentValues) { ... mRealm.beginTransaction(); Item item = mRealm.createObject(Item.class); item.set_id(++count); item.setName(contentValues.getAsString(sColumns[1])); item.setPrice(contentValues.getAsLong(sColumns[2])); mRealm.commitTransaction(); return Uri.withAppendedPath(uri, String.valueOf(item.get_id())); }

Slide 10

Slide 10 text

5. Implement bulkInsert @Override public int bulkInsert(Uri uri, ContentValues[] values) { ... mRealm.beginTransaction(); try { for (ContentValues value : values) { Item item = mRealm.createObject(Item.class); item.set_id(value.getAsLong(sColumns[0])); item.setName(value.getAsString(sColumns[1])); item.setPrice(value.getAsLong(sColumns[2])); } } finally { mRealm.commitTransaction(); } return values.length; }

Slide 11

Slide 11 text

compare with SQLite Query/Insert -> 10,000݅ Xperia Z1f (Android 4.4.2)

Slide 12

Slide 12 text

SQLite with ContentProvider 4 Insert͸ɺ͔ͳΓ஗͍ 4 Query͕ૣ͍

Slide 13

Slide 13 text

Realm with ContentProvider 4 Insert͕ɺͦΜͳʹ஗͘ͳ͍ 4 Query͕SQLiteʹൺ΂Δͱ஗͍ ʢCursorੜ੒ͷӨڹʣ 4 BulkInsert͸ޓ֯ʁ

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Summary 4 ύϑΥʔϚϯε͸མͪΔʢʁʣ͚ͲContentProviderͰ΋ ࢖͑Δ 4 Queryϝιου͸վળͷ༨஍͕͋Γͦ͏ 4 ࣗಈಉظ͚ͩContentProviderܦ༝ʹ͠ɺΞϓϦຊମ͸ RealmΛͦͷ··࢖͏ͷ͕ྑͦ͞͏