Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Using Realm with RxJava
Search
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
250
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
760
Flutter Hooks を使ったアプリ開発 / App Development with the Flutter Hooks
wasabeef
2
1.6k
Flutter 2021 の振り返りと今後のアプリ開発に向けて / Looking back on Flutter 2021 and for future app development.
wasabeef
4
2.3k
Other Decks in Programming
See All in Programming
Jetpack Compose メカニズム
skydoves
0
430
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.2k
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.9k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
220
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
wkhtmltopdfの次どうするか問題2026
willnet
1
430
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.4k
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
550
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
340
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
260
一人だけ、Kiroが静止する日
hideg
0
110
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1k
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
The browser strikes back
jonoalderson
0
1.7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
The SEO Collaboration Effect
kristinabergwall1
1
570
ラッコキーワード サービス紹介資料
rakko
1
4.9M
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Claude Code のすすめ
schroneko
67
230k
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.