SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
INTRO TO RXJAVA
& RXANDROID
Egor Andreevici
WHAT?
HOW?
WHY?
& A DEMO
WHAT IS RXJAVA?
“RXJAVA IS A JAVA VM IMPLEMENTATION OF
REACTIVEX (REACTIVE EXTENSIONS): A
LIBRARY FOR COMPOSING ASYNCHRONOUS
AND EVENT-BASED PROGRAMS BY USING
OBSERVABLE SEQUENCES.”
RxJava Wiki
WHAT IS RXJAVA?
WHAT IS RXJAVA?
OBSERVABLES (AND MARBLE DIAGRAMS)
WHAT IS RXJAVA?
PROGRAM STRUCTURE
subscription = Observable
.create(…)
.transform(…)
.subscribe(...);
HOW RXJAVA?
HOW RXJAVA?
THE HIGH LEVEL PLAN
▸ Create an Observable
▸ Manipulate data using operators
▸ Subscribe and consume
▸ Profit!
HOW RXJAVA?
CREATING OBSERVABLES: CREATE()
Observable.create(subscriber -> {
try {
for (int value = 1; value <= 3; value++) {
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
HOW RXJAVA?
THE OBSERVER INTERFACE
public interface Observer<T> {
void onCompleted();
void onError(Throwable e);
void onNext(T t);
}
HOW RXJAVA?
THE NOTIFICATIONS CONTRACT
▸ Zero or more onNext() notifications
▸ Either onCompleted() or onError(), not both!
▸ Nothing more!
▸ May never terminate
▸ May never call onCompleted()
▸ All notifications must be issued serially
HOW RXJAVA?
CREATING OBSERVABLES: JUST()
Observable.just(1);
Observable.just(1, 2);
Observable.just(1, 2, 3);
. . .
Observable.just(1, … , 9);
HOW RXJAVA?
CREATING OBSERVABLES: FROM()
Observable.from(Arrays.asList(1, 2, 3));
Observable.from(new Integer[]{1, 2, 3});
HOW RXJAVA?
CREATING OBSERVABLES: MISC
Observable.empty();
Observable.error(t);
Observable.never();
HOW RXJAVA?
Observable.create(subscriber -> {
try {
for (int i = 0; i < 10000; i++) {
T value = longRunningNetworkRequest();
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
CAVEATS: HANDLING UNSUBSCRIBING
HOW RXJAVA?
SUBSCRIPTION INTERFACE
public interface Subscription {
void unsubscribe();
boolean isUnsubscribed();
}
HOW RXJAVA?
CAVEATS: HANDLING UNSUBSCRIBING
Observable.create(subscriber -> {
try {
for (int i = 0; i < 10000; i++) {
if (subscriber.isUnsubscribed()) {
return;
}
T value = longRunningNetworkRequest();
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
HOW RXJAVA?
OPERATORS
▸ Transformational
▸ map()
▸ flatMap()
▸ concatMap()
▸ Filtering
▸ filter()
▸ take()
▸ skip()
▸ Combining
▸ merge()
▸ zip()
▸ combineLatest()
AND MANY MORE…
HOW RXJAVA?
OPERATORS: FILTER()
HOW RXJAVA?
OPERATORS: MAP()
HOW RXJAVA?
OPERATORS: FLATMAP()
HOW RXJAVA?
OPERATORS: ZIP()
HOW RXJAVA?
SUBSCRIBING TO OBSERVABLES
.subscribe(
value -> renderValue(value),
error -> renderError(error),
() -> Log.d(LOGTAG, "Done!"));
HOW RXJAVA?
MULTITHREADING: OPERATORS
Observable<T> observeOn(Scheduler scheduler) {}
Observable<T> subscribeOn(Scheduler scheduler) {}
HOW RXJAVA?
MULTITHREADING: SCHEDULERS
Schedulers.io()
Schedulers.computation()
Schedulers.newThread()
Schedulers.from(Executor)
HOW RXJAVA?
TESTING: BLOCKING OBSERVABLES
@Test
public void testingWithBlockingObservable() {
Observable<Integer> intObservable =
Observable.just(1, 2, 3);
BlockingObservable<Integer> blocking =
intObservable.toBlocking();
assertThat(blocking.first()).isEqualTo(1);
assertThat(blocking.last()).isEqualTo(3);
blocking.getIterator();
blocking.toIterable();
}
HOW RXJAVA?
TESTING: TESTSUBSCRIBER
@Test
public void testingWithTestSubscriber() {
Observable<Integer> intObservable =
Observable.just(1, 2, 3);
TestSubscriber<Integer> testSubscriber =
TestSubscriber.create();
intObservable.subscribe(testSubscriber);
testSubscriber.assertValues(1, 2, 3);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
}
HOW RXJAVA?
DEBUGGING: SIDE EFFECTS
Observable.just(1, 2, 3)
.doOnNext(next -> append("Before filter: " + next))
.filter(value -> value % 2 == 0)
.doOnNext(next -> append("After filter: " + next))
.subscribe(...);
RXJAVA ON ANDROID
RXJAVA ON ANDROID
RXANDROID
▸ Super tiny
▸ AndroidSchedulers.mainThread()
▸ HandlerScheduler.from(Handler)
RXJAVA ON ANDROID
RXBINDING
▸ RxJava binding APIs for Android's UI widgets
▸ RxView.clicks(…), RxView.enabled(…) etc.
▸ RxTextView.textChanges(…)
RXJAVA ON ANDROID
RXLIFECYCLE
▸ Lifecycle handling APIs for Android apps using RxJava
▸ .compose(RxLifecycle.bindActivity(lifecycle))
▸ RxActivity, RxFragment
▸ .compose(bindToLifecycle())
RXJAVA ON ANDROID
RETROFIT: THE UGLY
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
try {
List<Repo> repos = client.getRepos().execute().body();
// render repos
} catch (IOException e) {
// handle
}
}
RXJAVA ON ANDROID
RETROFIT: THE BAD
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
client.getRepos().enqueue(new Callback<List<Repo>>() {
@Override
public void onResponse(Call<List<Repo>> call,
Response<List<Repo>> response) {
// render repos
}
@Override
public void onFailure(Call<List<Repo>> call,
Throwable t) {
// handle
}
});
}
RXJAVA ON ANDROID
RETROFIT: THE GOOD
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
subscription = client.getRepos()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
repos -> renderRepos(repos),
error -> handleError(error));
}
WHY RXJAVA?
WHY RXJAVA?
WHY RXJAVA?
▸ Set of powerful operators
▸ Easy threading
▸ Explicit error handling
▸ Testable
▸ Lots of perks specific to Android
DEMO TIME!
THANK YOU!
Egor Andreevici
blog.egorand.me · @EgorAnd · +EgorAndreevich

Weitere ähnliche Inhalte

Was ist angesagt?

Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event Systems
Leonardo Borges
 

Was ist angesagt? (20)

Reactive programming with RxAndroid
Reactive programming with RxAndroidReactive programming with RxAndroid
Reactive programming with RxAndroid
 
Reactive Java (33rd Degree)
Reactive Java (33rd Degree)Reactive Java (33rd Degree)
Reactive Java (33rd Degree)
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Practical RxJava for Android
Practical RxJava for AndroidPractical RxJava for Android
Practical RxJava for Android
 
Reactive programming with RxJava
Reactive programming with RxJavaReactive programming with RxJava
Reactive programming with RxJava
 
My Gentle Introduction to RxJS
My Gentle Introduction to RxJSMy Gentle Introduction to RxJS
My Gentle Introduction to RxJS
 
Reactive Android: RxJava and beyond
Reactive Android: RxJava and beyondReactive Android: RxJava and beyond
Reactive Android: RxJava and beyond
 
Rxjava meetup presentation
Rxjava meetup presentationRxjava meetup presentation
Rxjava meetup presentation
 
RxJava Applied
RxJava AppliedRxJava Applied
RxJava Applied
 
Rxjs ppt
Rxjs pptRxjs ppt
Rxjs ppt
 
RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]RxJava applied [JavaDay Kyiv 2016]
RxJava applied [JavaDay Kyiv 2016]
 
rx-java-presentation
rx-java-presentationrx-java-presentation
rx-java-presentation
 
Rx java in action
Rx java in actionRx java in action
Rx java in action
 
Introduction to Reactive Java
Introduction to Reactive JavaIntroduction to Reactive Java
Introduction to Reactive Java
 
Rxjs ngvikings
Rxjs ngvikingsRxjs ngvikings
Rxjs ngvikings
 
Reactive Java (GeeCON 2014)
Reactive Java (GeeCON 2014)Reactive Java (GeeCON 2014)
Reactive Java (GeeCON 2014)
 
Introduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaIntroduction to Retrofit and RxJava
Introduction to Retrofit and RxJava
 
Functional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event SystemsFunctional Reactive Programming / Compositional Event Systems
Functional Reactive Programming / Compositional Event Systems
 

Andere mochten auch

Lightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and DesignLightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and Design
Deivison Sporteman
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
intive
 

Andere mochten auch (20)

Opportunity presentation tell the story (nz)
Opportunity presentation  tell the story (nz)Opportunity presentation  tell the story (nz)
Opportunity presentation tell the story (nz)
 
Making the Most of Your Gradle Builds
Making the Most of Your Gradle BuildsMaking the Most of Your Gradle Builds
Making the Most of Your Gradle Builds
 
Explorando novas telas com o Google TV
Explorando novas telas com o Google TVExplorando novas telas com o Google TV
Explorando novas telas com o Google TV
 
Choice Paralysis
Choice ParalysisChoice Paralysis
Choice Paralysis
 
About Flux
About FluxAbout Flux
About Flux
 
React.js and Flux in details
React.js and Flux in detailsReact.js and Flux in details
React.js and Flux in details
 
Android Design Principles and Popular Patterns
Android Design Principles and Popular PatternsAndroid Design Principles and Popular Patterns
Android Design Principles and Popular Patterns
 
Building Reactive webapp with React/Flux
Building Reactive webapp with React/FluxBuilding Reactive webapp with React/Flux
Building Reactive webapp with React/Flux
 
Flux architecture
Flux architectureFlux architecture
Flux architecture
 
Intro to Flux - ReactJS Warsaw #1
Intro to Flux - ReactJS Warsaw #1Intro to Flux - ReactJS Warsaw #1
Intro to Flux - ReactJS Warsaw #1
 
React & Flux Workshop
React & Flux WorkshopReact & Flux Workshop
React & Flux Workshop
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on android
 
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
 
Lightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and DesignLightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and Design
 
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
GDG 2014 - RxJava를 활용한 Functional Reactive Programming GDG 2014 - RxJava를 활용한 Functional Reactive Programming
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
 

Ähnlich wie Intro to RxJava/RxAndroid - GDG Munich Android

Ähnlich wie Intro to RxJava/RxAndroid - GDG Munich Android (20)

Reactive Programming with RxSwift
Reactive Programming with RxSwiftReactive Programming with RxSwift
Reactive Programming with RxSwift
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
Reactive Programming no Android
Reactive Programming no AndroidReactive Programming no Android
Reactive Programming no Android
 
GDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokesGDG DevFest 2015 - Reactive approach for slowpokes
GDG DevFest 2015 - Reactive approach for slowpokes
 
How to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingHow to Think in RxJava Before Reacting
How to Think in RxJava Before Reacting
 
Reactive x
Reactive xReactive x
Reactive x
 
Cycle.js - A functional reactive UI framework
Cycle.js - A functional reactive UI frameworkCycle.js - A functional reactive UI framework
Cycle.js - A functional reactive UI framework
 
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
 
Iniciación rx java
Iniciación rx javaIniciación rx java
Iniciación rx java
 
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn TớiTech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
Tech Talk #4 : RxJava and Using RxJava in MVP - Dương Văn Tới
 
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
4Developers 2015: Programowanie synchroniczne i asynchroniczne - dwa światy k...
 
Reactive Programming - ReactFoo 2020 - Aziz Khambati
Reactive Programming - ReactFoo 2020 - Aziz KhambatiReactive Programming - ReactFoo 2020 - Aziz Khambati
Reactive Programming - ReactFoo 2020 - Aziz Khambati
 
Understanding reactive programming with microsoft reactive extensions
Understanding reactive programming  with microsoft reactive extensionsUnderstanding reactive programming  with microsoft reactive extensions
Understanding reactive programming with microsoft reactive extensions
 
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...
 
Marble Testing RxJS streams
Marble Testing RxJS streamsMarble Testing RxJS streams
Marble Testing RxJS streams
 
RxJS Operators - Real World Use Cases - AngularMix
RxJS Operators - Real World Use Cases - AngularMixRxJS Operators - Real World Use Cases - AngularMix
RxJS Operators - Real World Use Cases - AngularMix
 
RxJava2 Slides
RxJava2 SlidesRxJava2 Slides
RxJava2 Slides
 
From zero to hero with the reactive extensions for java script
From zero to hero with the reactive extensions for java scriptFrom zero to hero with the reactive extensions for java script
From zero to hero with the reactive extensions for java script
 
[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product[JEEConf-2017] RxJava as a key component in mature Big Data product
[JEEConf-2017] RxJava as a key component in mature Big Data product
 
Intro to Rx Java
Intro to Rx JavaIntro to Rx Java
Intro to Rx Java
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Kürzlich hochgeladen (20)

Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 

Intro to RxJava/RxAndroid - GDG Munich Android