KEMBAR78
RxJava With retrolambda | PDF
RxJava with retrolambda
introduction
Andyang@2015/12/26
RxJava (x)
RxJava (o)
lifecycle memory leak
callback hell
error handling
lambda
API
XD
Retrolambda
Android N Java8
retrolambda library support lambda
jdk8
support java6/7
android support java8 

gradle
retrolambda setting on
android studio
apply plugin: 'me.tatarka.retrolambda'
buildscript {

repositories {

mavenCentral()

}



dependencies {

classpath 'me.tatarka:gradle-retrolambda:3.2.4'

}

}
compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}
lambda#1
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("click")
}
});
// lambda
button.setOnClickListener(view -> System.out.println("click"));
lambda#2
input -> body
view -> System.out.println("click")
lambda#3
intput
void
() -> body
x -> System.out.println(x)
(x, y) -> x + y;
(int x, int y) -> x + y;
lambda#4
() -> {}
{}
(x, y) -> x + y;
(x, y) -> x + y
lambda#5
(x, y) ->{
x * x;
y * y;
}
(x, y) ->{
x * x;
y * y;
return x + y;
}
lambda#6
Object reference
view.setOnClickListener(v -> v.setVisibility(View.GONE));
view.setOnClickListener(this::viewGone);
private void viewGone(View v){

v.setVisibility(View.GONE);

}
RxJava
pub/sub
RxJava setting on
android studio
RxAnroid
compile ‘io.reactivex:rxandroid:1.1.0'
RxLifecycle
compile 'com.trello:rxlifecycle:0.4.0'

compile 'com.trello:rxlifecycle-components:
0.4.0'
AsyncTask
class MyTask extends AsyncTask<String, Integer, String>
{



@Override

protected String doInBackground(String... params) {

return null;

}



@Override

protected void onPostExecute(String s) {

super.onPostExecute(s);

}

}
RxJava
//Observable
api.getPets()
//Scheduler 

.subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())
//Observer

.subscribe();
Observable
Observable.create(subscriber -> {

subscriber.onNext("");

subscriber.onCompleted();

subscriber.onError(null);

});
api.getPets()

.compose(bindToLifecycle())

.map(petsResponse ->
petsResponse.getResult().getResults())

.retry(this::networkRetry)

.subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())

.finallyDo(dialog::dismiss)

.subscribe(adapter::setPets, this::showErrorLog,
this::onComplete);
private boolean networkRetry(int times, Throwable throwable)
{

RetrofitError retrofitError = (RetrofitError) throwable;

return retrofitError.getKind() ==
RetrofitError.Kind.NETWORK || times < 3;

}
DEMO
4 sample
Sample 1 : api
DEMO
Sample 2 :
DEMO
Sample 3:
DEMO
Sample 4:
DEMO
sample code
1.https://github.com/bng86/RxJavaWithRetrolambdaSample
1.https://www.youtube.com/watch?v=k3D0cWyNno4
2.https://github.com/kaushikgopal/RxJava-Android-
Samples
3.https://mcxiaoke.gitbooks.io/rxdocs/content/Intro.html
Q&A

RxJava With retrolambda