rxjava with retrolambda

25
RxJava with retrolambda introduction Andyang@2015/12/26

Upload: -

Post on 12-Apr-2017

1.888 views

Category:

Technology


0 download

TRANSCRIPT

RxJava with retrolambda introduction

Andyang@2015/12/26

RxJava (x)

RxJava (o)

lifecycle memory leak

callback hell

error handling

lambda

API

XD

RetrolambdaAndroid 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#1button.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#3intput

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