Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Using Realm with RxJava
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daichi Furiya (Wasabeef)
April 23, 2015
Programming
2.5k
13
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Using Realm with RxJava
Using Realm with RxJava
Daichi Furiya (Wasabeef)
April 23, 2015
More Decks by Daichi Furiya (Wasabeef)
See All by Daichi Furiya (Wasabeef)
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
6
2.9k
About Flutter Architecture
wasabeef
1
330
2023 Flutter/Dart Summary
wasabeef
0
140
I/O Extended 2023 - Dart と Flutter の新機能
wasabeef
0
240
I/O Extended 2023 - Flutter 活用事例
wasabeef
10
3.1k
What it Takes to be a Flutter Developer
wasabeef
0
270
FlutterKaigi 2022 Keynote
wasabeef
1
750
Flutter Hooks を使ったアプリ開発 / App Development with the Flutter Hooks
wasabeef
2
1.5k
Flutter 2021 の振り返りと今後のアプリ開発に向けて / Looking back on Flutter 2021 and for future app development.
wasabeef
4
2.3k
Other Decks in Programming
See All in Programming
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
710
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.4k
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
180
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
190
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
210
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
250
初めての模倣学習とVLA
natsutan
0
370
不幸な GC
chencmd
0
840
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
270
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
250
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
810
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
Code Review Best Practice
trishagee
74
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Typedesign – Prime Four
hannesfritz
42
3.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
310
Design in an AI World
tapps
1
290
Transcript
Using Realm with RxJava Wasabeef
About Me wasabeef CyberAgent, Inc.
Realm Latest v0.80.1 (2015.4.23)
Introduction
Realm
Realm.getInstance() Realm realm = Realm.getInstance(this);
RealmObject public class User extends RealmObject { /** Other fields…
**/ }
RealmList<T> public class User extends RealmObject { private RealmList<Email> emails;
/** Other fields… **/ }
RealmQuery<T> RealmQuery<User> query = realm.where(User.class); query.equalTo(“name”, “Wasabeef”);
RealmResults<T> RealmResults<User> result = query.findAll();
RxJava
Observable<T> String[] names = {“Wasabeef”, “Chip”}; ! Observable.from(names).subscribe(s -> {
Log.d(“Hello ” + s); });
map, flatMap… etc. Observable.from(names) .subscribeOn(Schedulers.newThread()) .map(new Func1<String, String>() { @Override
public String call(String name) { return name.toUpperCase(); } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(s -> { Log.d(“Hello ” + s); });
subscribe(onNext, onError..) Observable.from(names).subscribe( new Observer<String>() { @Override public void onCompleted()
{ } ! @Override public void onError(Throwable e) { } ! @Override public void onNext(String s) { } });
Wrapping Realm around RxJava Source: http://kboyarshinov.com/android/wrapping-realm-around-rxjava/
issues #865
issue #865 ! // Get observable of all users Realm.getInstance(context)
.where(User.class) .findAll() .observable() .subscribe(users -> { // do stuff with users });
Defining Realm model public class RealmUser extends RealmObject { private
String name; ! public String getName() { return name; } ! public void setName(String name) { this.name = name; } }
Defining Immutable POJO public class User { private String name;
! public User(String name) { this.name = name; } ! public String getName() { return name; } }
Observing Realm
public abstract class OnSubscribeRealm<T extends RealmObject> implements Observable.OnSubscribe<T> { !
/** constructor **/ ! @Override public void call(final Subscriber<? super T> subscriber) { Realm realm = Realm.getInstance(context); subscriber.add(Subscriptions.create(() -> { try { realm.close(); } catch (RealmException ex) { subscriber.onError(ex); } })); ! T object; realm.beginTransaction(); try { object = get(realm); realm.commitTransaction(); } catch (RuntimeException e) { realm.cancelTransaction(); subscriber.onError(new RealmException(Error during transaction., e)); return; } catch (Error e) { realm.cancelTransaction(); subscriber.onError(e); return; } if (object != null) { subscriber.onNext(object); } subscriber.onCompleted(); } ! public abstract T get(Realm realm); }
public final class RealmObservable { ! private RealmObservable() { }
! public static <T extends RealmObject> Observable<T> object( Context context, Func1<Realm, T> function) { ! return Observable.create(new OnSubscribeRealm<T>(context) { @Override public T get(Realm realm) { return function.call(realm); } }); } }
public class RealmDataService { private Context context; ! public RealmDataService(Context
context) { this.context = context.getApplicationContext(); } ! public Observable<User> addUser(String userName) { return RealmObservable.object(context, new Func1<Realm, RealmUser>() { @Override public RealmUser call(Realm realm) { RealmUser realmUser = new RealmUser(); realmUser.setName(userName); return realm.copyToRealm(realmUser); } }).map(new Func1<RealmUser, User>() { @Override public User call(RealmUser realmUser) { // map to UI object return new User(realmUser.getName()); } }); } } Data Service
Usage private void addUser() { Subscription subscription = dataService.addUser(“Wasabeef”) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .subscribe( user -> /** use user data **/, throwable -> /** error! **/ ); if (compositeSubscription != null) { compositeSubscription.add(subscription); } }
Wasabeef
CyberAgent, Inc.
Thanks.