3/19 Realm World Tour - Recent Updates(Java) #realmworld
アジェンダ
- The Realm Mobile Platform Experience
- Product updates
- Realm Objective-C/Swift2.2-2.4
- Realm Java
- Guest presentations
- Ito
- Fumihiko Siroyama
- Introduce Error Prone
- Realm Mobile Platform Demo
Realm Java@山崎さん
2.3.0
- 今まで頭と後ろだけ任意の検索ができた
- →機能がリッチになった
- 検索の柔軟性向上
3.0.0
- Cocoaには昔からあったものをこちらにも
- 通知ができるようになったついでにRxJavaのObservableが使えるようになった
- 更新されるタイミングが分かった都合でスナップショット機能が追加
- リンクフィールドはリレーションシップのフィールドでも使えるようになった
- 削除時に通知=その時点では存在していない状況でも渡されるということ
非互換な変換
- isValidでチェックしてから使うように
- distinctで中身自体が変わる仕様だったが、返される時に生成されたスタンスが変わるだけになった
従来のコレクション通知
- RealmからDogクラス検索
- changeListenerを付けていた
- リストビューなら問題ない
- RecyclerViewだとどの要素が変わったのかがわからないと困る
詳細なコレクション通知
- onChangeにチェンジセットが渡されるようになった
- 削除前のインデックスが入っているintにアクセスしてももうないのでデータは取れないけど
- 連続して変化があった場合はrange使った方が
- 削除については後ろからRecyclerViewに教えてあげなきゃいけない
- RealmAndroidAdoptorにRealm用の実装が入っているのでこのコード覚えなくても
- アダプターを最新にしてくれれば
general headerのデモ
- webでも公開されている
- 削除した時にちゃんとアニメーションしていることがわかる
Realm Android Adapters
- RealmRecyclerViewAdaptorを継承するようにすればOK
スナップショット
RealmResultsとスナップショット
- 更新の挙動が0.8とかで変更された
- トランザクションコミットされてもイベント更新のタイミングでRealmResultsが変更されるという動作があった
- invitedがfalseなものを順に頭から見ていく
- 即時反映だとループしてる間にRealmResultsが1つ減ってしまう
- プログラムは1つ減ってるなんて知らないから1つ飛びに更新するようになってしまう
- それを防ぐためにループしている最中にResultsが更新されないようになっていた
- それはそれで不便
- 更新のタイミングが遅延される
- トランザクションがコミットされたタイミングで更新されるようになった
- スナップショット
- ある時点でのものを参照できる
- 1個ずつ要素処理できる
リンクフィールドでのソート
- personがdogをペットとして持っている時にdogの年齢でソートしたりできる
Realm Java 3.1の予定
- バックリンクとも呼ばれている
- どのフィールドが変わったかがわかるようになる
LinkingObject
- クエリのサポートがまだ
- 試すことはできる
- dogに飼っている人の情報を持つことができる
- 今までは全部の人を集めて来てそのリンクが自分だったものを引っ張ることはできた
- 今度から、personにdogをセットすれば自動的にできるように
- dogクラスのフィールドにRealmResutlsを用意するようにする
- 自分でクエリ何も書いてなくても引っ張ってこれるようになる
- personからdogへのリンクがあれば逆向きも取れる
質問
(ちょっと曖昧です)
- スナップショットは自分で何もしなくていいように見えるけど実際は?
- for eachの時はイテレータを取るので自動的にスナップショットが使われる